176 lines
4.6 KiB
C
176 lines
4.6 KiB
C
/*
|
|
***************************************************************************
|
|
* Ralink Tech Inc.
|
|
* 4F, No. 2 Technology 5th Rd.
|
|
* Science-based Industrial Park
|
|
* Hsin-chu, Taiwan, R.O.C.
|
|
*
|
|
* (c) Copyright 2002-2004, Ralink Technology, Inc.
|
|
*
|
|
* All rights reserved. Ralink's source code is an unpublished work and the
|
|
* use of a copyright notice does not imply otherwise. This source code
|
|
* contains confidential trade secret material of Ralink Tech. Any attemp
|
|
* or participation in deciphering, decoding, reverse engineering or in any
|
|
* way altering the source code is stricitly prohibited, unless the prior
|
|
* written consent of Ralink Technology, Inc. is obtained.
|
|
***************************************************************************
|
|
|
|
Module Name:
|
|
greenap.c
|
|
|
|
Abstract:
|
|
Ralink Wireless driver green ap related functions
|
|
|
|
Revision History:
|
|
Who When What
|
|
-------- ---------- ----------------------------------------------
|
|
*/
|
|
|
|
#include "rt_config.h"
|
|
|
|
|
|
#ifdef GREENAP_SUPPORT
|
|
VOID EnableAPMIMOPSv2(RTMP_ADAPTER *pAd, BOOLEAN ReduceCorePower)
|
|
{
|
|
bbp_set_mmps(pAd, ReduceCorePower);
|
|
rtmp_mac_set_mmps(pAd, ReduceCorePower);
|
|
|
|
pAd->ApCfg.bGreenAPActive=TRUE;
|
|
DBGPRINT(RT_DEBUG_INFO, ("EnableAPMIMOPSNew, 30xx changes the # of antenna to 1\n"));
|
|
}
|
|
|
|
|
|
VOID DisableAPMIMOPSv2(RTMP_ADAPTER *pAd)
|
|
{
|
|
bbp_set_mmps(pAd, FALSE);
|
|
rtmp_mac_set_mmps(pAd, FALSE);
|
|
|
|
pAd->ApCfg.bGreenAPActive=FALSE;
|
|
DBGPRINT(RT_DEBUG_INFO, ("DisableAPMIMOPSNew, 30xx reserve only one antenna\n"));
|
|
}
|
|
|
|
|
|
VOID EnableAPMIMOPSv1(
|
|
IN RTMP_ADAPTER *pAd,
|
|
IN BOOLEAN ReduceCorePower)
|
|
{
|
|
UCHAR BBPR3 = 0,BBPR1 = 0;
|
|
ULONG TxPinCfg = 0x00050F0A;/*Gary 2007/08/09 0x050A0A*/
|
|
UCHAR BBPR4=0;
|
|
UCHAR CentralChannel;
|
|
|
|
|
|
#ifdef RT305x
|
|
UCHAR RFValue=0;
|
|
|
|
RT30xxReadRFRegister(pAd, RF_R01, &RFValue);
|
|
RFValue &= 0x03; //clear bit[7~2]
|
|
RFValue |= 0x3C; // default 2Tx 2Rx
|
|
// turn off tx1
|
|
RFValue &= ~(0x1 << 5);
|
|
// turn off rx1
|
|
RFValue &= ~(0x1 << 4);
|
|
// Turn off unused PA or LNA when only 1T or 1R
|
|
#endif /* RT305x */
|
|
|
|
if(pAd->CommonCfg.Channel>14)
|
|
TxPinCfg=0x00050F05;
|
|
|
|
TxPinCfg &= 0xFFFFFFF3;
|
|
TxPinCfg &= 0xFFFFF3FF;
|
|
pAd->ApCfg.bGreenAPActive=TRUE;
|
|
|
|
CentralChannel = pAd->CommonCfg.CentralChannel;
|
|
DBGPRINT(RT_DEBUG_INFO, ("Run with BW_20\n"));
|
|
pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
|
|
CentralChannel = pAd->CommonCfg.Channel;
|
|
|
|
/* Set BBP registers to BW20 */
|
|
bbp_set_bw(pAd, BW_20);
|
|
|
|
/* RF Bandwidth related registers would be set in AsicSwitchChannel() */
|
|
if (pAd->Antenna.field.RxPath>1||pAd->Antenna.field.TxPath>1)
|
|
{
|
|
/*Tx/Rx Stream*/
|
|
bbp_set_txdac(pAd, 0);
|
|
bbp_set_rxpath(pAd, 1);
|
|
|
|
RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg);
|
|
|
|
#ifdef RT305x
|
|
RT30xxWriteRFRegister(pAd, RF_R01, RFValue);
|
|
#endif /* RT305x */
|
|
}
|
|
AsicSwitchChannel(pAd, CentralChannel, FALSE);
|
|
|
|
DBGPRINT(RT_DEBUG_INFO, ("EnableAPMIMOPS, 305x/28xx changes the # of antenna to 1\n"));
|
|
}
|
|
|
|
|
|
VOID DisableAPMIMOPSv1(
|
|
IN PRTMP_ADAPTER pAd)
|
|
{
|
|
UCHAR BBPR3=0,BBPR1=0;
|
|
ULONG TxPinCfg = 0x00050F0A; /* Gary 2007/08/09 0x050A0A */
|
|
UCHAR CentralChannel;
|
|
UINT32 Value=0;
|
|
|
|
|
|
#ifdef RT305x
|
|
UCHAR RFValue=0;
|
|
|
|
RT30xxReadRFRegister(pAd, RF_R01, &RFValue);
|
|
RFValue &= 0x03; //clear bit[7~2]
|
|
RFValue |= 0x3C; // default 2Tx 2Rx
|
|
#endif /* RT305x */
|
|
|
|
if(pAd->CommonCfg.Channel>14)
|
|
TxPinCfg=0x00050F05;
|
|
/* Turn off unused PA or LNA when only 1T or 1R*/
|
|
if (pAd->Antenna.field.TxPath == 1)
|
|
TxPinCfg &= 0xFFFFFFF3;
|
|
if (pAd->Antenna.field.RxPath == 1)
|
|
TxPinCfg &= 0xFFFFF3FF;
|
|
|
|
pAd->ApCfg.bGreenAPActive=FALSE;
|
|
|
|
if ((pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40) && (pAd->CommonCfg.Channel != 14))
|
|
{
|
|
UINT8 ext_ch = EXTCHA_NONE;
|
|
|
|
DBGPRINT(RT_DEBUG_INFO, ("Run with BW_40\n"));
|
|
/* Set CentralChannel to work for BW40 */
|
|
if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_ABOVE)
|
|
{
|
|
pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2;
|
|
ext_ch = EXTCHA_ABOVE;
|
|
}
|
|
else if ((pAd->CommonCfg.Channel > 2) && (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_BELOW))
|
|
{
|
|
pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2;
|
|
ext_ch = EXTCHA_BELOW;
|
|
}
|
|
CentralChannel = pAd->CommonCfg.CentralChannel;
|
|
AsicSetChannel(pAd, CentralChannel, BW_40, ext_ch, FALSE);
|
|
}
|
|
|
|
/*Tx Stream*/
|
|
if (WMODE_CAP_N(pAd->CommonCfg.PhyMode) && (pAd->Antenna.field.TxPath == 2))
|
|
bbp_set_txdac(pAd, 2);
|
|
else
|
|
bbp_set_txdac(pAd, 0);
|
|
|
|
/*Rx Stream*/
|
|
bbp_set_rxpath(pAd, pAd->Antenna.field.RxPath);
|
|
|
|
RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg);
|
|
|
|
#ifdef RT305x
|
|
RT30xxWriteRFRegister(pAd, RF_R01, RFValue);
|
|
#endif /* RT305x */
|
|
|
|
DBGPRINT(RT_DEBUG_INFO, ("DisableAPMIMOPS, 305x/28xx reserve only one antenna\n"));
|
|
}
|
|
#endif /* GREENAP_SUPPORT */
|
|
|