CHAR ConvertToRssi(RTMP_ADAPTER *pAd, struct raw_rssi_info *rssi_info, UCHAR rssi_idx) { UCHAR RssiOffset, LNAGain; CHAR BaseVal; CHAR rssi; /* Rssi equals to zero or rssi_idx larger than 3 should be an invalid value*/ if (rssi_idx >= 3) return -99; rssi = rssi_info->raw_rssi[rssi_idx]; if (rssi == 0) return -99; LNAGain = pAd->hw_cfg.lan_gain; if (pAd->LatchRfRegs.Channel > 14) RssiOffset = pAd->ARssiOffset[rssi_idx]; else RssiOffset = pAd->BGRssiOffset[rssi_idx]; BaseVal = -12; #if defined (MT7603) || defined (MT7628) if (IS_MT7603(pAd) || IS_MT7628(pAd)) return (rssi + (CHAR)RssiOffset - (CHAR)LNAGain); #endif return (BaseVal - RssiOffset - LNAGain - rssi); }
/* ======================================================================== Routine Description: Set LED Status Arguments: pAd Pointer to our adapter Status LED Status Return Value: None IRQL = PASSIVE_LEVEL IRQL = DISPATCH_LEVEL Note: ======================================================================== */ VOID RTMPSetLEDStatus(RTMP_ADAPTER *pAd, UCHAR Status) { /*ULONG data; */ UCHAR LinkStatus = 0; UCHAR LedMode; UCHAR MCUCmd = 0; BOOLEAN bIgnored = FALSE; #ifdef MT7628 INT LED_CMD = -1; #endif /*MT7628*/ #ifdef WSC_INCLUDED #ifdef WSC_LED_SUPPORT PWSC_CTRL pWscControl = NULL; #ifdef CONFIG_AP_SUPPORT pWscControl = &pAd->ApCfg.MBSSID[MAIN_MBSSID].WscControl; #endif /* CONFIG_AP_SUPPORT */ #ifdef CONFIG_STA_SUPPORT pWscControl = &pAd->StaCfg.WscControl; #endif /* CONFIG_STA_SUPPORT */ #endif /* WSC_LED_SUPPORT */ #endif /* WSC_INCLUDED */ #ifdef CONFIG_ATE /* In ATE mode of RT2860 AP/STA, we have erased 8051 firmware. So LED mode is not supported when ATE is running. */ if (!IS_RT3572(pAd)) { if (ATE_ON(pAd)) return; } #endif /* CONFIG_ATE */ LedMode = 1;//LED_MODE(pAd); #ifdef MT7628 if (IS_MT7603(pAd) || IS_MT7628(pAd)) { if (LedMode < 0 || Status <0 || LedMode > 15 || Status > 11) return; else LED_CMD = LED_Array[LedMode][Status]; } #endif /*MT7628*/ switch (Status) { case LED_LINK_DOWN: LinkStatus = LINK_STATUS_LINK_DOWN; pAd->LedCntl.LedIndicatorStrength = 0; MCUCmd = MCU_SET_LED_MODE; break; case LED_LINK_UP: if (pAd->CommonCfg.Channel > 14) LinkStatus = LINK_STATUS_ABAND_LINK_UP; else LinkStatus = LINK_STATUS_GBAND_LINK_UP; MCUCmd = MCU_SET_LED_MODE; break; case LED_RADIO_ON: LinkStatus = LINK_STATUS_RADIO_ON; MCUCmd = MCU_SET_LED_MODE; break; case LED_HALT: LedMode = 0; /* Driver sets MAC register and MAC controls LED */ case LED_RADIO_OFF: LinkStatus = LINK_STATUS_RADIO_OFF; MCUCmd = MCU_SET_LED_MODE; break; case LED_WPS: LinkStatus = LINK_STATUS_WPS; MCUCmd = MCU_SET_LED_MODE; break; case LED_ON_SITE_SURVEY: LinkStatus = LINK_STATUS_ON_SITE_SURVEY; MCUCmd = MCU_SET_LED_MODE; break; case LED_POWER_UP: LinkStatus = LINK_STATUS_POWER_UP; MCUCmd = MCU_SET_LED_MODE; break; #ifdef CONFIG_ATE #endif /* CONFIG_ATE */ #ifdef WSC_INCLUDED #ifdef WSC_LED_SUPPORT case LED_WPS_IN_PROCESS: if (WscSupportWPSLEDMode(pAd)) { LinkStatus = LINK_STATUS_WPS_IN_PROCESS; MCUCmd = MCU_SET_WPS_LED_MODE; pWscControl->WscLEDMode = LED_WPS_IN_PROCESS; MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("%s: LED_WPS_IN_PROCESS\n", __FUNCTION__)); } else bIgnored = TRUE; break; case LED_WPS_ERROR: if (WscSupportWPSLEDMode(pAd)) { /* In the case of LED mode 9, the error LED should be turned on only after WPS walk time expiration. */ if ((pWscControl->bWPSWalkTimeExpiration == FALSE) && (LED_MODE(pAd) == WPS_LED_MODE_9)) { /* do nothing. */ } else { LinkStatus = LINK_STATUS_WPS_ERROR; MCUCmd = MCU_SET_WPS_LED_MODE; } pWscControl->WscLEDMode = LED_WPS_ERROR; pWscControl->WscLastWarningLEDMode = LED_WPS_ERROR; } else bIgnored = TRUE; break; case LED_WPS_SESSION_OVERLAP_DETECTED: if (WscSupportWPSLEDMode(pAd)) { LinkStatus = LINK_STATUS_WPS_SESSION_OVERLAP_DETECTED; MCUCmd = MCU_SET_WPS_LED_MODE; pWscControl->WscLEDMode = LED_WPS_SESSION_OVERLAP_DETECTED; pWscControl->WscLastWarningLEDMode = LED_WPS_SESSION_OVERLAP_DETECTED; } else bIgnored = TRUE; break; case LED_WPS_SUCCESS: if (WscSupportWPSLEDMode(pAd)) { if ((LED_MODE(pAd) == WPS_LED_MODE_7) || (LED_MODE(pAd) == WPS_LED_MODE_11) || (LED_MODE(pAd) == WPS_LED_MODE_12) ) { /* In the WPS LED mode 7, 11 and 12, the blue LED would last 300 seconds regardless of the AP's security settings. */ LinkStatus = LINK_STATUS_WPS_SUCCESS_WITH_SECURITY; MCUCmd = MCU_SET_WPS_LED_MODE; pWscControl->WscLEDMode = LED_WPS_SUCCESS; /* Turn off the WPS successful LED pattern after 300 seconds. */ RTMPSetTimer(&pWscControl->WscLEDTimer, WSC_SUCCESSFUL_LED_PATTERN_TIMEOUT); } else if (LED_MODE(pAd) == WPS_LED_MODE_8) /* The WPS LED mode 8 */ { if (WscAPHasSecuritySetting(pAd, pWscControl)) /* The WPS AP has the security setting. */ { LinkStatus = LINK_STATUS_WPS_SUCCESS_WITH_SECURITY; MCUCmd = MCU_SET_WPS_LED_MODE; pWscControl->WscLEDMode = LED_WPS_SUCCESS; /* Turn off the WPS successful LED pattern after 300 seconds. */ RTMPSetTimer(&pWscControl->WscLEDTimer, WSC_SUCCESSFUL_LED_PATTERN_TIMEOUT); } else /* The WPS AP does not have the secuirty setting. */ { LinkStatus = LINK_STATUS_WPS_SUCCESS_WITHOUT_SECURITY; MCUCmd = MCU_SET_WPS_LED_MODE; pWscControl->WscLEDMode = LED_WPS_SUCCESS; /* Turn off the WPS successful LED pattern after 300 seconds. */ RTMPSetTimer(&pWscControl->WscLEDTimer, WSC_SUCCESSFUL_LED_PATTERN_TIMEOUT); } } else if (LED_MODE(pAd) == WPS_LED_MODE_9) /* The WPS LED mode 9. */ { /* Always turn on the WPS blue LED for 300 seconds. */ LinkStatus = LINK_STATUS_WPS_BLUE_LED; MCUCmd = MCU_SET_WPS_LED_MODE; pWscControl->WscLEDMode = LED_WPS_SUCCESS; /* Turn off the WPS successful LED pattern after 300 seconds. */ RTMPSetTimer(&pWscControl->WscLEDTimer, WSC_SUCCESSFUL_LED_PATTERN_TIMEOUT); } else { MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("%s: LED_WPS_SUCCESS (Incorrect LED mode = %d)\n", __FUNCTION__, LED_MODE(pAd))); ASSERT(FALSE); } } else bIgnored = TRUE; break; case LED_WPS_TURN_LED_OFF: if (WscSupportWPSLEDMode(pAd)) { LinkStatus = LINK_STATUS_WPS_TURN_LED_OFF; MCUCmd = MCU_SET_WPS_LED_MODE; pWscControl->WscLEDMode = LED_WPS_TURN_LED_OFF; } else bIgnored = TRUE; break; case LED_WPS_TURN_ON_BLUE_LED: if (WscSupportWPSLEDMode(pAd)) { LinkStatus = LINK_STATUS_WPS_BLUE_LED; MCUCmd = MCU_SET_WPS_LED_MODE; pWscControl->WscLEDMode = LED_WPS_SUCCESS; } else bIgnored = TRUE; break; case LED_NORMAL_CONNECTION_WITHOUT_SECURITY: if (WscSupportWPSLEDMode(pAd)) { LinkStatus = LINK_STATUS_NORMAL_CONNECTION_WITHOUT_SECURITY; MCUCmd = MCU_SET_WPS_LED_MODE; pWscControl->WscLEDMode = LED_WPS_SUCCESS; } else bIgnored = TRUE; break; case LED_NORMAL_CONNECTION_WITH_SECURITY: if (WscSupportWPSLEDMode(pAd)) { LinkStatus = LINK_STATUS_NORMAL_CONNECTION_WITH_SECURITY; MCUCmd = MCU_SET_WPS_LED_MODE; pWscControl->WscLEDMode = LED_WPS_SUCCESS; } else bIgnored = TRUE; break; /*WPS LED Mode 10 */ case LED_WPS_MODE10_TURN_ON: if(WscSupportWPSLEDMode10(pAd)) { LinkStatus = LINK_STATUS_WPS_MODE10_TURN_ON; MCUCmd = MCU_SET_WPS_LED_MODE; } else bIgnored = TRUE; break; case LED_WPS_MODE10_FLASH: if(WscSupportWPSLEDMode10(pAd)) { LinkStatus = LINK_STATUS_WPS_MODE10_FLASH; MCUCmd = MCU_SET_WPS_LED_MODE; } else bIgnored = TRUE; break; case LED_WPS_MODE10_TURN_OFF: if(WscSupportWPSLEDMode10(pAd)) { LinkStatus = LINK_STATUS_WPS_MODE10_TURN_OFF; MCUCmd = MCU_SET_WPS_LED_MODE;; } else bIgnored = TRUE; break; #endif /* WSC_LED_SUPPORT */ #endif /* WSC_INCLUDED */ default: MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_WARN, ("RTMPSetLED::Unknown Status 0x%x\n", Status)); break; } #ifdef MT7628 if (IS_MT7628(pAd)) { AndesLedEnhanceOP(pAd, 0, 0, 0, LED_CMD); MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("%s: LED_CMD:0x%x, LED Mode:0x%x, LinkStatus:0x%x\n", __FUNCTION__, LED_CMD, LedMode, LinkStatus)); } else #endif /*MT7628*/ if (MCUCmd) { AsicSendCommandToMcu(pAd, MCUCmd, 0xff, LedMode, LinkStatus, FALSE); MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("%s: MCUCmd:0x%x, LED Mode:0x%x, LinkStatus:0x%x\n", __FUNCTION__, MCUCmd, LedMode, LinkStatus)); } /* Keep LED status for LED SiteSurvey mode. After SiteSurvey, we will set the LED mode to previous status. */ if ((Status != LED_ON_SITE_SURVEY) && (Status != LED_POWER_UP) && (bIgnored == FALSE)) pAd->LedCntl.LedStatus = Status; }
/* ======================================================================== Routine Description: Initialize chip related information. Arguments: pCB - WLAN control block pointer Return Value: None Note: ======================================================================== */ int RtmpChipOpsHook(VOID *pCB) { RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)pCB; RTMP_CHIP_CAP *pChipCap = &pAd->chipCap; UINT32 MacValue; int ret = 0; RTMP_CHIP_OP *pChipOps = &pAd->chipOps; /* sanity check */ if (WaitForAsicReady(pAd) == FALSE) return -1; // TODO: shiang-7603 if (IS_MT7603(pAd) || IS_MT7628(pAd) || IS_MT76x6(pAd)) { MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_OFF, ("%s(%d): Not support for HIF_MT yet!\n", __FUNCTION__, __LINE__)); } else { #if defined(RTMP_MAC) || defined(RLT_MAC) RTMP_IO_READ32(pAd, MAC_CSR0, &MacValue); pAd->MACVersion = MacValue; #endif /* defined(RTMP_MAC) || defined(RLT_MAC) */ } if (pAd->MACVersion == 0xffffffff) return -1; /* default init */ RTMP_DRS_ALG_INIT(pAd, RATE_ALG_LEGACY); #ifdef RTMP_RBUS_SUPPORT if (pAd->infType == RTMP_DEV_INF_RBUS) { RTMP_SYS_IO_READ32(0xb000000c, &pAd->CommonCfg.CID); RTMP_SYS_IO_READ32(0xb0000000, &pAd->CommonCfg.CN); MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("CN: %lx\tCID = %lx\n", pAd->CommonCfg.CN, pAd->CommonCfg.CID)); } #endif /* RTMP_RBUS_SUPPORT */ /* EDCCA */ pChipOps->ChipSetEDCCA= NULL; #ifdef MT7628 if (IS_MT7628(pAd)) { mt7628_init(pAd); goto done; } #endif /* MT7628 */ #ifdef MT7615 if (IS_MT7615(pAd)) { mt7615_init(pAd); goto done; }; #endif /* MT7615 */ #ifdef GREENAP_SUPPORT pChipOps->EnableAPMIMOPS = EnableAPMIMOPSv1; pChipOps->DisableAPMIMOPS = DisableAPMIMOPSv1; #endif /* GREENAP_SUPPORT */ #ifdef RTMP_MAC // TODO: default settings for rest of the chips!! change this to really default chip. RTxx_default_Init(pAd); #endif /* RTMP_MAC */ /* We depends on RfICType and MACVersion to assign the corresponding operation callbacks. */ #ifdef RT305x #ifdef RT3352 /*FIXME by Steven: RFIC=RFIC_3022 in some RT3352 board*/ /* if (pAd->RfIcType == RFIC_3322) {*/ if (IS_RT3352(pAd)) RT3352_Init(pAd); else #endif /* RT3352 */ #ifdef RT5350 if (IS_RT5350(pAd)) RT5350_Init(pAd); else #endif /* RT5350 */ /* comment : the RfIcType is not ready yet, because EEPROM doesn't be initialized. */ /* if ((pAd->MACVersion == 0x28720200) && ((pAd->RfIcType == RFIC_3320) || (pAd->RfIcType == RFIC_3020) || (pAd->RfIcType == RFIC_3021) || (pAd->RfIcType == RFIC_3022))) */ if (IS_RT3050_3052_3350(pAd)) RT305x_Init(pAd); else #endif /* RT305x */ done: MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("Chip specific bbpRegTbSize=%d!\n", pChipCap->bbpRegTbSize)); MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("Chip VCO calibration mode = %d!\n", pChipCap->FlgIsVcoReCalMode)); return ret; }
/* ======================================================================== Routine Description: Initialize chip related information. Arguments: pCB - WLAN control block pointer Return Value: None Note: ======================================================================== */ int RtmpChipOpsHook(VOID *pCB) { RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)pCB; RTMP_CHIP_CAP *pChipCap = &pAd->chipCap; int ret = 0; RTMP_CHIP_OP *pChipOps = &pAd->chipOps; /* sanity check */ if (WaitForAsicReady(pAd) == FALSE) return -1; // TODO: shiang-7603 if (IS_MT7603(pAd) || IS_MT7628(pAd) || IS_MT76x6(pAd)) { MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("%s(%d): Not support for HIF_MT yet!\n", __FUNCTION__, __LINE__)); } else { #if defined(RTMP_MAC) || defined(RLT_MAC) RTMP_IO_READ32(pAd, MAC_CSR0, &pAd->MACVersion); #endif /* defined(RTMP_MAC) || defined(RLT_MAC) */ } if (pAd->MACVersion == 0xffffffff) return -1; /* default init */ RTMP_DRS_ALG_INIT(pAd, RATE_ALG_LEGACY); #ifdef RTMP_RBUS_SUPPORT if (pAd->infType == RTMP_DEV_INF_RBUS) { RTMP_SYS_IO_READ32(0xb000000c, &pAd->CommonCfg.CID); RTMP_SYS_IO_READ32(0xb0000000, &pAd->CommonCfg.CN); MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("CN: %lx\tCID = %lx\n", pAd->CommonCfg.CN, pAd->CommonCfg.CID)); } #endif /* RTMP_RBUS_SUPPORT */ /* EDCCA */ pChipOps->ChipSetEDCCA= NULL; #ifdef MT7628 if (IS_MT7628(pAd)) { mt7628_init(pAd); goto done; } #endif /* MT7628 */ #ifdef MT7615 if (IS_MT7615(pAd)) { mt7615_init(pAd); goto done; }; #endif /* MT7615 */ #ifdef GREENAP_SUPPORT #if defined (MT7603) || defined (MT7628) pChipOps->EnableAPMIMOPS = EnableAPMIMOPSv2; pChipOps->DisableAPMIMOPS = DisableAPMIMOPSv2; #else pChipOps->EnableAPMIMOPS = EnableAPMIMOPSv1; pChipOps->DisableAPMIMOPS = DisableAPMIMOPSv1; #endif #endif /* GREENAP_SUPPORT */ #ifdef RTMP_MAC // TODO: default settings for rest of the chips!! change this to really default chip. RTxx_default_Init(pAd); #endif /* RTMP_MAC */ /* We depends on RfICType and MACVersion to assign the corresponding operation callbacks. */ done: MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("Chip specific bbpRegTbSize=%d!\n", pChipCap->bbpRegTbSize)); MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("Chip VCO calibration mode = %d!\n", pChipCap->FlgIsVcoReCalMode)); #ifdef DOT11W_PMF_SUPPORT MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("[PMF] Encryption mode = %d\n", pChipCap->FlgPMFEncrtptMode)); #endif /* DOT11W_PMF_SUPPORT */ return ret; }
/* ======================================================================== Routine Description: Initialize chip related information. Arguments: pCB - WLAN control block pointer Return Value: None Note: ======================================================================== */ int RtmpChipOpsHook(VOID *pCB) { RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)pCB; RTMP_CHIP_CAP *pChipCap = &pAd->chipCap; UINT32 MacValue; int ret = 0; #ifdef GREENAP_SUPPORT RTMP_CHIP_OP *pChipOps = &pAd->chipOps; #endif /* GREENAP_SUPPORT */ /* sanity check */ if (WaitForAsicReady(pAd) == FALSE) return -1; // TODO: shiang-7603 if (IS_MT7603(pAd) || IS_MT7628(pAd)) { DBGPRINT(RT_DEBUG_OFF, ("%s(%d): Not support for HIF_MT yet!\n", __FUNCTION__, __LINE__)); } else { #if defined(RTMP_MAC) || defined(RLT_MAC) RTMP_IO_READ32(pAd, MAC_CSR0, &MacValue); pAd->MACVersion = MacValue; #endif /* defined(RTMP_MAC) || defined(RLT_MAC) */ } if (pAd->MACVersion == 0xffffffff) return -1; /* default init */ RTMP_DRS_ALG_INIT(pAd, RATE_ALG_LEGACY); #ifdef MT7603 if (IS_MT7603(pAd)) { mt7603_init(pAd); goto done; } #endif /* MT7603 */ #ifdef GREENAP_SUPPORT #if defined (MT7603) || defined (MT7628) pChipOps->EnableAPMIMOPS = EnableAPMIMOPSv2; pChipOps->DisableAPMIMOPS = DisableAPMIMOPSv2; #else pChipOps->EnableAPMIMOPS = EnableAPMIMOPSv1; pChipOps->DisableAPMIMOPS = DisableAPMIMOPSv1; #endif #endif /* GREENAP_SUPPORT */ #ifdef RTMP_MAC // TODO: default settings for rest of the chips!! change this to really default chip. RTxx_default_Init(pAd); #endif /* RTMP_MAC */ /* We depends on RfICType and MACVersion to assign the corresponding operation callbacks. */ done: DBGPRINT(RT_DEBUG_TRACE, ("Chip specific bbpRegTbSize=%d!\n", pChipCap->bbpRegTbSize)); DBGPRINT(RT_DEBUG_TRACE, ("Chip VCO calibration mode = %d!\n", pChipCap->FlgIsVcoReCalMode)); #ifdef DOT11W_PMF_SUPPORT DBGPRINT(RT_DEBUG_TRACE, ("[PMF] Encryption mode = %d\n", pChipCap->FlgPMFEncrtptMode)); #endif /* DOT11W_PMF_SUPPORT */ return ret; }