static INT rtmp_bbp_init(RTMP_ADAPTER *pAd) { INT Index = 0; /* Read BBP register, make sure BBP is up and running before write new data*/ if (rtmp_bbp_is_ready(pAd)== FALSE) return FALSE; Index = 0; /* Initialize BBP register to default value*/ for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++) { #ifdef MICROWAVE_OVEN_SUPPORT #endif /* MICROWAVE_OVEN_SUPPORT */ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBPRegTable[Index].Register, BBPRegTable[Index].Value); } /* re-config specific BBP registers for individual chip */ if (pAd->chipCap.pBBPRegTable) { REG_PAIR *reg_list = pAd->chipCap.pBBPRegTable; for (Index = 0; Index < pAd->chipCap.bbpRegTbSize; Index++) { RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, reg_list[Index].Register, reg_list[Index].Value); DBGPRINT(RT_DEBUG_TRACE, ("BBP_R%d=0x%x\n", reg_list[Index].Register, reg_list[Index].Value)); } } if (pAd->chipOps.AsicBbpInit != NULL) pAd->chipOps.AsicBbpInit(pAd); /* For rt2860E and after, init BBP_R84 with 0x19. This is for extension channel overlapping IOT. RT3090 should not program BBP R84 to 0x19, otherwise TX will block. 3070/71/72,3090,3090A( are included in RT30xx),3572,3390 */ if (((pAd->MACVersion & 0xffff) != 0x0101) && !(IS_RT30xx(pAd)|| IS_RT3572(pAd) || IS_RT5390(pAd) || IS_RT5392(pAd) || IS_RT3290(pAd) || IS_MT7601(pAd) || IS_RT6352(pAd) || IS_MT76x2(pAd))) RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R84, 0x19); if (pAd->MACVersion == 0x28600100) { RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x12); } return TRUE; }
NDIS_STATUS NICInitBBP(RTMP_ADAPTER *pAd) { INT Index = 0; /* Read BBP register, make sure BBP is up and running before write new data*/ if (rtmp_bbp_is_ready(pAd)== FALSE) return NDIS_STATUS_FAILURE; Index = 0; /* Initialize BBP register to default value*/ for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++) { #ifdef MICROWAVE_OVEN_SUPPORT #ifdef MT7601 if ( BBPRegTable[Index].Register == BBP_R65) { /* Backup BBP_R65 and B5.R6 and B5.R7 */ pAd->CommonCfg.MO_Cfg.Stored_BBP_R65 = BBPRegTable[Index].Value; DBGPRINT(RT_DEBUG_TRACE, ("Stored_BBP_R65=%x @%s \n", pAd->CommonCfg.MO_Cfg.Stored_BBP_R65, __FUNCTION__)); } #endif /* MT7601 */ #endif /* MICROWAVE_OVEN_SUPPORT */ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBPRegTable[Index].Register, BBPRegTable[Index].Value); } /* re-config specific BBP registers for individual chip */ if (pAd->chipCap.pBBPRegTable) { REG_PAIR *pbbpRegTb = pAd->chipCap.pBBPRegTable; for (Index = 0; Index < pAd->chipCap.bbpRegTbSize; Index++) { RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, pbbpRegTb[Index].Register, pbbpRegTb[Index].Value); DBGPRINT(RT_DEBUG_TRACE, ("BBP_R%d=0x%x\n", pbbpRegTb[Index].Register, pbbpRegTb[Index].Value)); } } if (pAd->chipOps.AsicBbpInit != NULL) pAd->chipOps.AsicBbpInit(pAd); /* For rt2860E and after, init BBP_R84 with 0x19. This is for extension channel overlapping IOT. RT3090 should not program BBP R84 to 0x19, otherwise TX will block. 3070/71/72,3090,3090A( are included in RT30xx),3572,3390 */ if (((pAd->MACVersion & 0xffff) != 0x0101) && !(IS_RT30xx(pAd)|| IS_RT3572(pAd) || IS_RT5390(pAd) || IS_RT5392(pAd) || IS_RT3290(pAd) || IS_MT7601(pAd))) RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R84, 0x19); if (pAd->MACVersion == 0x28600100) { RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x12); } return NDIS_STATUS_SUCCESS; }