📄 cmm_info.c
字号:
case 2: if (pHTPhyMode->MCS == MCS_AUTO) { pAd->CommonCfg.DesiredHtPhy.MCSSet[0]= 0xff; pAd->CommonCfg.DesiredHtPhy.MCSSet[1]= 0xff; } else { ULONG mode; //mcs = 1<<(pHTPhyMode->MCS); mode = pHTPhyMode->MCS / 8; if (mode < 2) pAd->CommonCfg.DesiredHtPhy.MCSSet[mode] = (1 << (pHTPhyMode->MCS - mode * 8));// pmcs = (ULONG*)&(pAd->CommonCfg.DesiredHtPhy.MCSSet[0]);// *pmcs= 1<<(pHTPhyMode->MCS); } //pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; //pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff; break; } // Set Rx MCSSet switch (RxStream) { case 1: pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; pAd->CommonCfg.HtCapability.MCSSet[1] = 0x00; break; case 2: case 3: pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff; break; } if (pAd->CommonCfg.bForty_Mhz_Intolerant && (pAd->CommonCfg.Channel <= 14) && (pHTPhyMode->BW == BW_40) ) { pHTPhyMode->BW = BW_40; pAd->CommonCfg.HtCapability.HtCapInfo.Forty_Mhz_Intolerant = 1; } if(pHTPhyMode->BW == BW_40) { pAd->CommonCfg.HtCapability.MCSSet[4] = 0x1; // MCS 32 pAd->CommonCfg.DesiredHtPhy.MCSSet[4] = 0x1; pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 1; if (pAd->CommonCfg.Channel <= 14) { pAd->CommonCfg.HtCapability.HtCapInfo.CCKmodein40 = 1; } pAd->CommonCfg.DesiredHtPhy.ChannelWidth = 1; pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 1; pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = (pHTPhyMode->ExtOffset == EXTCHA_BELOW)? (EXTCHA_BELOW): EXTCHA_ABOVE; // Set Regsiter for extension channel position. RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBP3Value); if ((pHTPhyMode->ExtOffset == EXTCHA_BELOW)) { Value |= 0x1; BBP3Value |= (0x20); RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); } else if ((pHTPhyMode->ExtOffset == EXTCHA_ABOVE)) { Value &= 0xfe; BBP3Value &= (~0x20); RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); } // Turn on BBP 40MHz mode now only as AP . // Sta can turn on BBP 40MHz after connection with 40MHz AP. Sta only broadcast 40MHz capability before connection. if ((pAd->OpMode == OPMODE_AP) || ADHOC_ON(pAd)) { RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); BBPValue &= (~0x18); BBPValue |= 0x10; RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBP3Value); pAd->CommonCfg.BBPCurrentBW = BW_40; } } else { pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 0; pAd->CommonCfg.DesiredHtPhy.ChannelWidth = 0; pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 0; pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = EXTCHA_NONE; pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; // Turn on BBP 20MHz mode by request here. { RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); BBPValue &= (~0x18); BBPValue |= 0x10; RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); pAd->CommonCfg.BBPCurrentBW = BW_40; } } if(pHTPhyMode->STBC == STBC_USE) { pAd->CommonCfg.HtCapability.HtCapInfo.TxSTBC = 1; pAd->CommonCfg.DesiredHtPhy.TxSTBC = 1; pAd->CommonCfg.HtCapability.HtCapInfo.RxSTBC = 1; pAd->CommonCfg.DesiredHtPhy.RxSTBC = 1; } else { pAd->CommonCfg.DesiredHtPhy.TxSTBC = 0; pAd->CommonCfg.DesiredHtPhy.RxSTBC = 0; } if(pHTPhyMode->SHORTGI == GI_400) { pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 1; pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor40 = 1; pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 = 1; pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 = 1; } else { pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 0; pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor40 = 0; pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 = 0; pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 = 0; } // We support link adaptation for unsolicit MCS feedback, set to 2. pAd->CommonCfg.HtCapability.ExtHtCapInfo.MCSFeedback = MCSFBK_NONE; //MCSFBK_UNSOLICIT; pAd->CommonCfg.AddHTInfo.ControlChan = pAd->CommonCfg.Channel; // 1, the extension channel above the control channel. // Only for updating Registry transmit setting. However, real transmit setting is from OID setting or via negociation. pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = pHTPhyMode->ExtOffset; pAd->CommonCfg.RegTransmitSetting.field.BW = pHTPhyMode->BW; pAd->CommonCfg.RegTransmitSetting.field.ShortGI = pHTPhyMode->SHORTGI; pAd->CommonCfg.RegTransmitSetting.field.STBC = pHTPhyMode->STBC; pAd->CommonCfg.RegTransmitSetting.field.HTMODE = pHTPhyMode->HtMode; pAd->CommonCfg.RegTransmitSetting.field.MCS = pHTPhyMode->MCS; { // EDCA parameters used for AP's own transmission if (pAd->CommonCfg.APEdcaParm.bValid == FALSE) { pAd->CommonCfg.APEdcaParm.bValid = TRUE; pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3; pAd->CommonCfg.APEdcaParm.Aifsn[1] = 7; pAd->CommonCfg.APEdcaParm.Aifsn[2] = 1; pAd->CommonCfg.APEdcaParm.Aifsn[3] = 1; pAd->CommonCfg.APEdcaParm.Cwmin[0] = 4; pAd->CommonCfg.APEdcaParm.Cwmin[1] = 4; pAd->CommonCfg.APEdcaParm.Cwmin[2] = 3; pAd->CommonCfg.APEdcaParm.Cwmin[3] = 2; pAd->CommonCfg.APEdcaParm.Cwmax[0] = 6; pAd->CommonCfg.APEdcaParm.Cwmax[1] = 10; pAd->CommonCfg.APEdcaParm.Cwmax[2] = 4; pAd->CommonCfg.APEdcaParm.Cwmax[3] = 3; pAd->CommonCfg.APEdcaParm.Txop[0] = 0; pAd->CommonCfg.APEdcaParm.Txop[1] = 0; pAd->CommonCfg.APEdcaParm.Txop[2] = 96; pAd->CommonCfg.APEdcaParm.Txop[3] = 48; } AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); } MlmeUpdateHtTxRates(pAd, 0xff); if (pHTPhyMode->MCS != MCS_AUTO) { pAd->CommonCfg.bAutoTxRateSwitch = FALSE; pAd->CommonCfg.HTPhyMode.field.STBC = pHTPhyMode->STBC; pAd->CommonCfg.HTPhyMode.field.ShortGI = pHTPhyMode->SHORTGI; pAd->CommonCfg.HTPhyMode.field.MCS = pHTPhyMode->MCS; pAd->CommonCfg.HTPhyMode.field.MODE = pHTPhyMode->HtMode; pAd->CommonCfg.HTPhyMode.field.BW = pHTPhyMode->BW;#ifdef CONFIG_STA_SUPPORT pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.STBC = pAd->CommonCfg.HTPhyMode.field.STBC; pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.ShortGI = pAd->CommonCfg.HTPhyMode.field.ShortGI; pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MCS = pAd->CommonCfg.HTPhyMode.field.MCS; pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE = pAd->CommonCfg.HTPhyMode.field.MODE;#endif // CONFIG_STA_SUPPORT // } else { pAd->CommonCfg.bAutoTxRateSwitch = TRUE; }}/* ======================================================================== Routine Description: Update HT IE from our capability. Arguments: Send all HT IE in beacon/probe rsp/assoc rsp/action frame. ========================================================================*/VOID RTMPUpdateHTIE( IN RT_HT_CAPABILITY *pRtHt, OUT HT_CAPABILITY_IE *pHtCapability, OUT ADD_HT_INFO_IE *pAddHtInfo){ RTMPZeroMemory(pHtCapability, sizeof(HT_CAPABILITY_IE)); RTMPZeroMemory(pAddHtInfo, sizeof(ADD_HT_INFO_IE)); pHtCapability->HtCapInfo.ChannelWidth = pRtHt->ChannelWidth; pHtCapability->HtCapInfo.MimoPs = pRtHt->MimoPs; pHtCapability->HtCapInfo.GF = pRtHt->GF; pHtCapability->HtCapInfo.ShortGIfor20 = pRtHt->ShortGIfor20; pHtCapability->HtCapInfo.ShortGIfor40 = pRtHt->ShortGIfor40; pHtCapability->HtCapInfo.TxSTBC = pRtHt->TxSTBC; pHtCapability->HtCapInfo.RxSTBC = pRtHt->RxSTBC; pHtCapability->HtCapInfo.AMsduSize = pRtHt->AmsduSize; pHtCapability->HtCapParm.MaxRAmpduFactor = pRtHt->MaxRAmpduFactor; pHtCapability->HtCapParm.MpduDensity = pRtHt->MpduDensity; pAddHtInfo->AddHtInfo.ExtChanOffset = pRtHt->ExtChanOffset ; pAddHtInfo->AddHtInfo.RecomWidth = pRtHt->RecomWidth; pAddHtInfo->AddHtInfo2.OperaionMode = pRtHt->OperaionMode; pAddHtInfo->AddHtInfo2.NonGfPresent = pRtHt->NonGfPresent; RTMPMoveMemory(pAddHtInfo->MCSSet, pRtHt->MCSSet, 4); // rt2860 only support MCS max=32, no need to copy all 16 uchar. DBGPRINT(RT_DEBUG_TRACE,("RTMPUpdateHTIE <== \n"));}/* ======================================================================== Description: Add Client security information into ASIC WCID table and IVEIV table. Return: ========================================================================*/VOID RTMPAddWcidAttributeEntry( IN PRTMP_ADAPTER pAd, IN UCHAR BssIdx, IN UCHAR KeyIdx, IN UCHAR CipherAlg, IN MAC_TABLE_ENTRY *pEntry){ ULONG WCIDAttri; USHORT offset; UCHAR IVEIV = 0; USHORT Wcid;#ifdef CONFIG_STA_SUPPORT if (pEntry && ADHOC_ON(pAd)) Wcid = pEntry->Aid; else if (pEntry && INFRA_ON(pAd)) Wcid = BSSID_WCID; else Wcid = MCAST_WCID;#endif // CONFIG_STA_SUPPORT // // Update WCID attribute table offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE);#ifdef CONFIG_STA_SUPPORT WCIDAttri = (CipherAlg<<1) | SHAREDKEYTABLE;#endif // CONFIG_STA_SUPPORT // RTMP_IO_WRITE32(pAd, offset, WCIDAttri); // Update IV/EIV table offset = MAC_IVEIV_TABLE_BASE + (Wcid * HW_IVEIV_ENTRY_SIZE); // WPA mode if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) || (CipherAlg == CIPHER_AES)) { // Eiv bit on. keyid always is 0 for pairwise key IVEIV = (KeyIdx <<6) | 0x20; } else { // WEP KeyIdx is default tx key. IVEIV = (KeyIdx << 6); } // For key index and ext IV bit, so only need to update the position(offset+3). RTMP_IO_WRITE8(pAd, offset+3, IVEIV); DBGPRINT(RT_DEBUG_TRACE,("RTMPAddWcidAttributeEntry: WCID #%d, KeyIndex #%d, Alg=%s\n",Wcid, KeyIdx, CipherName[CipherAlg])); DBGPRINT(RT_DEBUG_TRACE,(" WCIDAttri = %lx \n", WCIDAttri)); }/* ========================================================================== Description: Parse encryption typeArguments: pAdapter Pointer to our adapter wrq Pointer to the ioctl argument Return Value: None Note: ==========================================================================*/CHAR *GetEncryptType(CHAR enc){ if(enc == Ndis802_11WEPDisabled) return "NONE"; if(enc == Ndis802_11WEPEnabled) return "WEP"; if(enc == Ndis802_11Encryption2Enabled) return "TKIP"; if(enc == Ndis802_11Encryption3Enabled) return "AES"; if(enc == Ndis802_11Encryption4Enabled) return "TKIPAES"; else return "UNKNOW";}CHAR *GetAuthMode(CHAR auth){ if(auth == Ndis802_11AuthModeOpen) return "OPEN"; if(auth == Ndis802_11AuthModeShared) return "SHARED"; if(auth == Ndis802_11AuthModeAutoSwitch) return "AUTOWEP"; if(auth == Ndis802_11AuthModeWPA) return "WPA"; if(auth == Ndis802_11AuthModeWPAPSK) return "WPAPSK"; if(auth == Ndis802_11AuthModeWPANone) return "WPANONE"; if(auth == Ndis802_11AuthModeWPA2) return "WPA2"; if(auth == Ndis802_11AuthModeWPA2PSK) return "WPA2PSK"; if(auth == Ndis802_11AuthModeWPA1WPA2) return "WPA1WPA2"; if(auth == Ndis802_11AuthModeWPA1PSKWPA2PSK) return "WPA1PSKWPA2PSK"; else return "UNKNOW";} #ifndef UCOS/* ========================================================================== Description: Get site survey results Arguments: pAdapter Pointer to our adapter wrq Pointer to the ioctl argument Return Value: None Note: Usage: 1.) UI needs to wait 4 seconds after issue a site survey command 2.) iwpriv ra0 get_site_survey 3.) UI needs to prepare at least 4096bytes to get the results ==========================================================================*/#define LINE_LEN (4+28+20+8+10+9+7+3) // Channel+SSID+Bssid+WepStatus+AuthMode+Signal+WiressMode+NetworkTypeVOID RTMPIoctlGetSiteSurvey( IN PRTMP_ADAPTER pAdapter, IN struct iwreq *wrq){ CHAR *msg; INT i=0; INT Status=0; CHAR Ssid[MAX_LEN_OF_SSID +1]; INT Rssi = 0; UINT Rssi_Quality = 0; NDIS_802_11_NETWORK_TYPE wireless_mode; os_alloc_mem(NULL, (PUCHAR *)&msg, sizeof(CHAR)*((MAX_LEN_OF_BSS_TABLE)*LINE_LEN)); if (msg == NULL) { DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - msg memory alloc fail.\n")); return; } memset(msg, 0 ,(MAX_LEN_OF_BSS_TABLE)*LINE_LEN ); memset(Ssid, 0 ,(MAX_LEN_OF_SSID +1)); sprintf(msg,"%s","\n"); sprintf(msg+strlen(msg),"%-4s%-28s%-20s%-8s%-10s%-9s%-7s%-3s\n", "Ch", "SSID", "BSSID", "Enc", "Auth", "Siganl(%)", "W-Mode", " NT"); for(i=0;i<MAX_LEN_OF_BSS_TABLE;i++) { if( pAdapter->ScanTab.BssEntry[i].Channel==0) break; if((strlen(msg)+LINE_LEN ) >= IW_SCAN_MAX_DATA) break; //Channel sprintf(msg+strlen(msg),"%-4d", pAdapter->ScanTab.BssEntry[i].Channel); //SSID memcpy(Ssid, pAdapter->ScanTab.BssEntry[i].Ssid, pAdapter->ScanTab.BssEntry[i].SsidLen); Ssid[pAdapter->ScanTab.BssEntry[i].SsidLen] = '\0';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -