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

📄 meeprom.c

📁 atheros ar5001 5002 driver
💻 C
📖 第 1 页 / 共 5 页
字号:


	tempValue = eepromRead(devNum, pOffsets->HDR_MODE_DEVICE_INFO);
	pHeaderInfo->turboDisable = (A_UINT16)((tempValue >> 15) & 0x01);
	pHeaderInfo->RFKill = (A_UINT16)((tempValue >> 14) & 0x01);
	pHeaderInfo->deviceType = (A_UINT16)((tempValue >> 11) & 0x07);
	pHeaderInfo->Bmode = (A_UINT16)((tempValue >> 1) & 0x01);
	pHeaderInfo->Amode = (A_UINT16)(tempValue & 0x01);

	if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 1)) 
			|| (pHeaderInfo->majorVersion == 4)){
		pHeaderInfo->info11a.turbo2wMaxPower = (A_UINT16)((tempValue >> 4) & 0x3f);
		pHeaderInfo->xtnd11a = (A_UINT16)((tempValue >> 3) & 0x01);
		pHeaderInfo->Gmode = (A_UINT16)((tempValue >> 2) & 0x01);

		tempValue = eepromRead(devNum, pOffsets->HDR_ANTENNA_GAIN);
		pHeaderInfo->antennaGain5 = (A_UINT16)((tempValue >> 8) & 0xff);
		pHeaderInfo->antennaGain2_4 = (A_UINT16)(tempValue & 0xff);
	}

	if(pHeaderInfo->majorVersion >= 4) {
		tempValue = eepromRead(devNum, pOffsets->HDR_ANTENNA_GAIN + 1);
		pHeaderInfo->earStartLocation = (A_UINT16)(tempValue & 0xfff);
		pHeaderInfo->eepMap = (A_UINT16)((tempValue >> 14) & 0x3);

		tempValue = eepromRead(devNum, pOffsets->HDR_ANTENNA_GAIN + 2);
		pHeaderInfo->trgtPowerStartLocation = (A_UINT16)(tempValue & 0xfff);
		pHeaderInfo->enable32khz = (A_UINT16)((tempValue >> 15) & 0x1);

		if(pHeaderInfo->minorVersion >= 5) {
			pHeaderInfo->oldEnable32khz = (A_UINT16)((tempValue >> 15) & 0x1);
			pHeaderInfo->enable32khz = (A_UINT16)((tempValue >> 14) & 0x1);
		}
	}

	if((pHeaderInfo->majorVersion >= 4) && (pHeaderInfo->minorVersion >= 4)){
		tempValue = eepromRead(devNum, pOffsets->HDR_ANTENNA_GAIN + 3);
		pHeaderInfo->eepFileVersion = (A_UINT16)((tempValue >> 8) & 0xff);
		pHeaderInfo->earFileVersion = (A_UINT16)(tempValue & 0xff);

		tempValue = eepromRead(devNum, pOffsets->HDR_ANTENNA_GAIN + 4);
		pHeaderInfo->artBuildNumber = (A_UINT16)((tempValue >> 10) & 0x3f);
		pHeaderInfo->earFileIdentifier = (A_UINT16)(tempValue & 0xff);
	}

	if((pHeaderInfo->majorVersion >= 4) && (pHeaderInfo->minorVersion >= 5)){
		tempValue = eepromRead(devNum, pOffsets->HDR_ANTENNA_GAIN + 5);
		pHeaderInfo->maskRadio0 = (A_UINT16)(tempValue & 0x3);
		pHeaderInfo->maskRadio1 = (A_UINT16)((tempValue >> 2) & 0x3);
	}

	offset = pOffsets->HDR_11A_COMMON;
	tempValue = eepromRead(devNum, offset);
	pHeaderInfo->info11a.switchSettling = (A_UINT16)((tempValue >> 8) & 0x7f);
	pHeaderInfo->info11a.txrxAtten = (A_UINT16)((tempValue >> 2) & 0x3f);
	pHeaderInfo->info11a.antennaControl[0] = (A_UINT16)((tempValue << 4) & 0x3f);

	offset++;
	tempValue = eepromRead(devNum, offset);
	pHeaderInfo->info11a.antennaControl[0] = (A_UINT16)(((tempValue >> 12) & 0x0f) | pHeaderInfo->info11a.antennaControl[0]);
	pHeaderInfo->info11a.antennaControl[1] = (A_UINT16)((tempValue >> 6) & 0x3f);
	pHeaderInfo->info11a.antennaControl[2] = (A_UINT16)(tempValue  & 0x3f);

	offset++;
	tempValue = eepromRead(devNum, offset);
	pHeaderInfo->info11a.antennaControl[3] = (A_UINT16)((tempValue >> 10)  & 0x3f);
	pHeaderInfo->info11a.antennaControl[4] = (A_UINT16)((tempValue >> 4)  & 0x3f);
	pHeaderInfo->info11a.antennaControl[5] = (A_UINT16)((tempValue << 2)  & 0x3f);

	offset++;
	tempValue = eepromRead(devNum, offset);
	pHeaderInfo->info11a.antennaControl[5] = (A_UINT16)(((tempValue >> 14)  & 0x03) | pHeaderInfo->info11a.antennaControl[5]);
	pHeaderInfo->info11a.antennaControl[6] = (A_UINT16)((tempValue >> 8)  & 0x3f);
	pHeaderInfo->info11a.antennaControl[7] = (A_UINT16)((tempValue >> 2)  & 0x3f);
	pHeaderInfo->info11a.antennaControl[8] = (A_UINT16)((tempValue << 4)  & 0x3f);

	offset++;
	tempValue = eepromRead(devNum, offset);
	pHeaderInfo->info11a.antennaControl[8] = (A_UINT16)(((tempValue >> 12)  & 0x0f) | pHeaderInfo->info11a.antennaControl[8]);
	pHeaderInfo->info11a.antennaControl[9] = (A_UINT16)((tempValue >> 6)  & 0x3f);
	pHeaderInfo->info11a.antennaControl[10] = (A_UINT16)(tempValue & 0x3f);

	offset++;
	tempValue = eepromRead(devNum, offset);
	pHeaderInfo->info11a.adcDesiredSize = (A_INT8)((tempValue >> 8)  & 0xff);
	pHeaderInfo->info11a.ob_4 = (A_UINT16)((tempValue >> 5)  & 0x07);
	pHeaderInfo->info11a.db_4 = (A_UINT16)((tempValue >> 2)  & 0x07);
	pHeaderInfo->info11a.ob_3 = (A_UINT16)((tempValue << 1)  & 0x07);

	offset++;
	tempValue = eepromRead(devNum, offset);
	pHeaderInfo->info11a.ob_3 = (A_UINT16)(((tempValue >> 15)  & 0x01) | pHeaderInfo->info11a.ob_3);
	pHeaderInfo->info11a.db_3 = (A_UINT16)((tempValue >> 12)  & 0x07);
	pHeaderInfo->info11a.ob_2 = (A_UINT16)((tempValue >> 9)  & 0x07);
	pHeaderInfo->info11a.db_2 = (A_UINT16)((tempValue >> 6)  & 0x07);
	pHeaderInfo->info11a.ob_1 = (A_UINT16)((tempValue >> 3)  & 0x07);
	pHeaderInfo->info11a.db_1 = (A_UINT16)(tempValue & 0x07);

	offset++;
	tempValue = eepromRead(devNum, offset);
	pHeaderInfo->info11a.txEndToXLNAOn = (A_UINT16)((tempValue >> 8)  & 0xff);
	pHeaderInfo->info11a.thresh62 = (A_UINT16)(tempValue  & 0xff);

	offset++;
	tempValue = eepromRead(devNum, offset);
	pHeaderInfo->info11a.txEndToXPAOff = (A_UINT16)((tempValue >> 8)  & 0xff);
	pHeaderInfo->info11a.txFrameToXPAOn = (A_UINT16)(tempValue  & 0xff);

	offset++;
	tempValue = eepromRead(devNum, offset);
	pHeaderInfo->info11a.pgaDesiredSize = (A_INT8)((tempValue >> 8)  & 0xff);
	pHeaderInfo->info11a.noisefloorThresh = (A_INT8)(tempValue  & 0xff);

	offset++;
	tempValue = eepromRead(devNum, offset);
	if(pHeaderInfo->majorVersion == 4) {	
		pHeaderInfo->fixedBiasA = (A_UINT16)((tempValue >> 13)  & 0x01);
	}
	pHeaderInfo->info11a.xlnaGain = (A_UINT16)((tempValue >> 5)  & 0xff);
	pHeaderInfo->info11a.xgain = (A_UINT16)((tempValue >> 1)  & 0x0f);
	pHeaderInfo->info11a.xpd = (A_UINT16)(tempValue  & 0x01);

	if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 3)) 
			|| (pHeaderInfo->majorVersion == 4)){
		offset++;
		tempValue = eepromRead(devNum, offset);
		pHeaderInfo->info11a.falseDetectBackoff = (A_UINT16)((tempValue >> 6)  & 0x7f);
	}

	if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 4)) 
			|| (pHeaderInfo->majorVersion == 4)){
		pHeaderInfo->info11a.initialGainI = (A_UINT16)((tempValue >> 13) & 0x07);
		pHeaderInfo->info11a.xrTargetPower = (A_UINT16)(tempValue  & 0x3f);

		offset++;
		tempValue = eepromRead(devNum, offset);
		pHeaderInfo->info11a.initialGainI = (A_UINT16)(((tempValue & 0x07) << 3) | pHeaderInfo->info11a.initialGainI);
	}

	if(pHeaderInfo->majorVersion == 4) {	
		pHeaderInfo->info11a.iqCalQ = (A_UINT16)((tempValue >> 3) & 0x1f);
		pHeaderInfo->info11a.iqCalI = (A_UINT16)((tempValue >> 8) & 0x3f);
		
		offset++;
		if(pHeaderInfo->minorVersion >= 1) {
			tempValue = eepromRead(devNum, offset);
			pHeaderInfo->info11a.rxtxMargin = (A_UINT16)(tempValue & 0x3f);
		}
	}

	//11b and g params
	//start by reading b
	pModeInfo = &(pHeaderInfo->info11b);
	offset = pOffsets->HDR_11B_COMMON;
	for (i = 0; i < 2; i++) {
		tempValue = eepromRead(devNum, offset);
		pModeInfo->switchSettling = (A_UINT16)((tempValue >> 8) & 0x7f);
		pModeInfo->txrxAtten = (A_UINT16)((tempValue >> 2) & 0x3f);
		pModeInfo->antennaControl[0] = (A_UINT16)((tempValue << 4) & 0x3f);

		tempValue = eepromRead(devNum, offset + 1);
		pModeInfo->antennaControl[0] = (A_UINT16)(((tempValue >> 12) & 0x0f) | pModeInfo->antennaControl[0]);
		pModeInfo->antennaControl[1] = (A_UINT16)((tempValue >> 6) & 0x3f);
		pModeInfo->antennaControl[2] = (A_UINT16)(tempValue  & 0x3f);

		tempValue = eepromRead(devNum, offset + 2);
		pModeInfo->antennaControl[3] = (A_UINT16)((tempValue >> 10)  & 0x3f);
		pModeInfo->antennaControl[4] = (A_UINT16)((tempValue >> 4)  & 0x3f);
		pModeInfo->antennaControl[5] = (A_UINT16)((tempValue << 2)  & 0x3f);

		tempValue = eepromRead(devNum, offset + 3);
		pModeInfo->antennaControl[5] = (A_UINT16)(((tempValue >> 14)  & 0x03) | pModeInfo->antennaControl[5]);
		pModeInfo->antennaControl[6] = (A_UINT16)((tempValue >> 8)  & 0x3f);
		pModeInfo->antennaControl[7] = (A_UINT16)((tempValue >> 2)  & 0x3f);
		pModeInfo->antennaControl[8] = (A_UINT16)((tempValue << 4)  & 0x3f);

		tempValue = eepromRead(devNum, offset + 4);
		pModeInfo->antennaControl[8] = (A_UINT16)(((tempValue >> 12)  & 0x0f) | pModeInfo->antennaControl[8]);
		pModeInfo->antennaControl[9] = (A_UINT16)((tempValue >> 6)  & 0x3f);
		pModeInfo->antennaControl[10] = (A_UINT16)(tempValue & 0x3f);

		tempValue = eepromRead(devNum, offset + 5);
		pModeInfo->adcDesiredSize = (A_INT8)((tempValue >> 8)  & 0xff);
		pModeInfo->ob_1 = (A_UINT16)((tempValue >> 4)  & 0x07);
		pModeInfo->db_1 = (A_UINT16)(tempValue & 0x07);

		tempValue = eepromRead(devNum, offset + 6);
		pModeInfo->txEndToXLNAOn = (A_UINT16)((tempValue >> 8)  & 0xff);
		pModeInfo->thresh62 = (A_UINT16)(tempValue  & 0xff);

		tempValue = eepromRead(devNum, offset + 7);
		pModeInfo->txEndToXPAOff = (A_UINT16)((tempValue >> 8)  & 0xff);
		pModeInfo->txFrameToXPAOn = (A_UINT16)(tempValue  & 0xff);

		tempValue = eepromRead(devNum, offset + 8);
		pModeInfo->pgaDesiredSize = (A_INT8)((tempValue >> 8)  & 0xff);
		pModeInfo->noisefloorThresh = (A_INT8)(tempValue  & 0xff);
		
		tempValue = eepromRead(devNum, offset + 9);
		if((pHeaderInfo->majorVersion == 4) && (i == 1)) {
			pHeaderInfo->fixedBiasB = (A_UINT16)((tempValue >> 13)  & 0x01); 
		}
		pModeInfo->xlnaGain = (A_UINT16)((tempValue >> 5)  & 0xff);
		pModeInfo->xgain = (A_UINT16)((tempValue >> 1)  & 0x0f);
		pModeInfo->xpd = (A_UINT8)(tempValue  & 0x01);

		if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 3)) 
			|| (pHeaderInfo->majorVersion == 4)){
			tempValue = eepromRead(devNum, offset+10);
			pModeInfo->falseDetectBackoff = (A_UINT16)((tempValue >> 6)  & 0x7f);
		}

		//read the extra info for EEPROM version 3.4
		if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 4)) 
			|| (pHeaderInfo->majorVersion == 4)){
			pModeInfo->initialGainI = (A_UINT16)((tempValue >> 13) & 0x07);

			tempValue = eepromRead(devNum, offset + 11);
			pModeInfo->initialGainI = (A_UINT16)(((tempValue & 0x07) << 3) | pModeInfo->initialGainI);
			pLibDev->p16kEepHeader->scaledOfdmCckDelta = (A_UINT16)((tempValue & 0xff) >> 3);

			if((pHeaderInfo->majorVersion == 4) && (pHeaderInfo->minorVersion >= 6)) {
				pLibDev->p16kEepHeader->scaledCh14FilterCckDelta = (A_UINT16)((tempValue >> 11)  & 0x1f);
			}

			tempValue = eepromRead(devNum, offset + 12);
			pModeInfo->calPier1 = (A_UINT16)(tempValue & 0xff);
			if(pModeInfo->calPier1 != 0xff) {
				pModeInfo->calPier1 = fbin2freq_2p4(devNum, pModeInfo->calPier1);
			}
			pModeInfo->calPier2 = (A_UINT16)((tempValue >> 8)  & 0xff);
			if(pModeInfo->calPier2 != 0xff) {
				pModeInfo->calPier2 = fbin2freq_2p4(devNum, pModeInfo->calPier2);
			}

			if(i == 1) {  //11g mode
 				tempValue = eepromRead(devNum, offset + 13);
				pModeInfo->turbo2wMaxPower = (A_UINT16)(tempValue & 0x7f);		
				pModeInfo->xrTargetPower = (A_UINT16)((tempValue >> 7)  & 0x3f);

			}
		}

		if(pHeaderInfo->majorVersion == 4) {
			if(i == 0) {
				tempValue = eepromRead(devNum, offset + 13);
				pModeInfo->calPier3 = (A_UINT16)(tempValue & 0xff);
				if(pModeInfo->calPier3 != 0xff) {
					pModeInfo->calPier3 = fbin2freq_2p4(devNum, pModeInfo->calPier3);
				}

				if(pHeaderInfo->minorVersion >= 1) {
					pModeInfo->rxtxMargin = (A_UINT16)((tempValue >> 8) & 0x3f);
				}
			}

			if(i == 1) {  //11g mode
				tempValue = eepromRead(devNum, offset + 14);
				pModeInfo->calPier3 = (A_UINT16)(tempValue & 0xff);
				if(pModeInfo->calPier3 != 0xff) {
					pModeInfo->calPier3 = fbin2freq_2p4(devNum, pModeInfo->calPier3);
				}
				
				if(pHeaderInfo->minorVersion >= 1) {
					pModeInfo->rxtxMargin = (A_UINT16)((tempValue >> 8) & 0x3f);
				}

				tempValue = eepromRead(devNum, offset + 15);
				pModeInfo->iqCalQ = (A_UINT16)(tempValue & 0x1f);
				pModeInfo->iqCalI = (A_UINT16)((tempValue >> 5)  & 0x3f);

				if(pHeaderInfo->minorVersion >= 2) {
					tempValue = eepromRead(devNum, offset + 16);				
					pHeaderInfo->ofdmCckGainDeltaX2 = (A_INT8)(tempValue & 0xFF);				
				}
			}
		}
		//change params to read g stuff
		pModeInfo = &(pHeaderInfo->info11g);
		offset = pOffsets->HDR_11G_COMMON;
	}
	
	//read the test groups
	offset = pOffsets->HDR_CTL;
	for( i = 0; i < pHeaderInfo->numCtl; i+=2) {
		tempValue = eepromRead(devNum, offset++);
		pHeaderInfo->testGroups[i] = (A_UINT16)((tempValue >> 8) & 0xff);
		pHeaderInfo->testGroups[i+1] = (A_UINT16)(tempValue & 0xff);
	}

	//read b and g ob/db, store in ob/db_4
	if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 1)) 
			|| (pHeaderInfo->majorVersion == 4)){
		tempValue = eepromRead(devNum, pOffsets->HDR_11B_SPECIFIC);
		pHeaderInfo->info11b.db_4 = (A_UINT16)((tempValue >> 3) & 0x7);
		pHeaderInfo->info11b.ob_4 = (A_UINT16)(tempValue & 0x7);
		tempValue = eepromRead(devNum, pOffsets->HDR_11G_SPECIFIC);
		pHeaderInfo->info11g.db_4 = (A_UINT16)((tempValue >> 3) & 0x7);
		pHeaderInfo->info11g.ob_4 = (A_UINT16)(tempValue & 0x7);
	}

	
	//read corner cal info
#if 0
	if(pHeaderInfo->minorVersion >= 2) {
		offset = pOffsets->HDR_11A_SPECIFIC;
		tempValue = eepromRead(devNum, offset++);
		pHeaderInfo->cornerCal[0].gSel = (A_UINT16)(tempValue & 0x1);
		pHeaderInfo->cornerCal[0].pd84 = (A_UINT16)((tempValue >> 1) & 0x1);
		pHeaderInfo->cornerCal[0].pd90 = (A_UINT16)((tempValue >> 2) & 0x1);
		pHeaderInfo->cornerCal[0].clip = (A_UINT16)((tempValue >> 3) & 0x7);
		pHeaderInfo->cornerCal[1].gSel = (A_UINT16)((tempValue >> 6) & 0x1);
		pHeaderInfo->cornerCal[1].pd84 = (A_UINT16)((tempValue >> 7) & 0x1);
		pHeaderInfo->cornerCal[1].pd90 = (A_UINT16)((tempValue >> 8) & 0x1);
		pHeaderInfo->cornerCal[1].clip = (A_UINT16)((tempValue >> 9) & 0x7);
		pHeaderInfo->cornerCal[2].gSel = (A_UINT16)((tempValue >> 12) & 0x1);
		pHeaderInfo->cornerCal[2].pd84 = (A_UINT16)((tempValue >> 13) & 0x1);
		pHeaderInfo->cornerCal[2].pd90 = (A_UINT16)((tempValue >> 14) & 0x1);
		pHeaderInfo->cornerCal[2].clip = (A_UINT16)((tempValue >> 15) & 0x1);
		
		tempValue = eepromRead(devNum, offset);
		pHeaderInfo->cornerCal[2].clip = (A_UINT16)(((tempValue & 0x3) << 1) | pHeaderInfo->cornerCal[2].clip);
		pHeaderInfo->cornerCal[3].gSel = (A_UINT16)((tempValue >> 2) & 0x1);
		pHeaderInfo->cornerCal[3].pd84 = (A_UINT16)((tempValue >> 3) & 0x1);
		pHeaderInfo->cornerCal[3].pd90 = (A_UINT16)((tempValue >> 4) & 0x1);
		pHeaderInfo->cornerCal[3].clip = (A_UINT16)((tempValue >> 5) & 0x7);
	}
#endif
	return;
}

/**************************************************************************
* programHeaderInfo - Program device registers with eeprom header info
*
* RETURNS: 
*/
void  programHeaderInfo
(
 A_UINT32			devNum,
 MDK_EEP_HEADER_INFO	*pHeaderInfo,
 A_UINT16			freq,
 A_UCHAR			mode
)
{
	A_UINT32		tempOB=0;
	A_UINT32		tempDB=0;

	MODE_HEADER_INFO	*pModeInfo;
    LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];

	switch(mode) {
	case MODE_11A:
		pModeInfo = &(pHeaderInfo->info11a);
		break;

	case MODE_11G:
	case MODE_11O:
		pModeInfo = &(pHeaderInfo->info11g);
		break;

	case MODE_11B:
		pModeInfo = &(pHeaderInfo->info11b);
		break;

	default:

		mError(devNum, EINVAL, "Device Number %d:Illegal mode passed to programHeaderInfo\n", devNum);
		return;
	} //end switch
	
	writeField(devNum, "bb_switch_settling", pModeInfo->switchSettling); 

	writeField(devNum, "bb_txrxatten", pModeInfo->txrxAtten);

	//Antenna controls are not being applied

	writeField(devNum, "bb_adc_desired_size", pModeInfo->adcDesiredSize);
	if(((freq > 4000) && (freq < 5260)) || (mode != MODE_11A)) {
		tempOB = pModeInfo->ob_1;
		tempDB = pModeInfo->db_1;
	}
	else if ((freq >= 5260) && (freq < 5500)) {
		tempOB = pModeInfo->ob_2;
		tempDB = pModeInfo->db_2;
	}
	else if ((freq >= 5500) && (freq < 5725)) {
		tempOB = pModeInfo->ob_3;
		tempDB = pModeInfo->db_3;
	}
	else if (freq >= 5725) {
		tempOB = pModeInfo->ob_4;
		tempDB = pModeInfo->db_4;
	}

	writeField(devNum, "rf_ob", tempOB);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -