亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? athreg.c

?? Atheros AP Test with Agilent N4010A source code
?? C
?? 第 1 頁 / 共 5 頁
字號:
    //check for the existance of the regArray before we start
    if(pLibDev->regArray == NULL) {
        mError(devNum, EIO, "Device Number %d:Software has no register file values, run resetDevice before changeField \n", devNum);
        return;
    }
    
    //search for the field name within the register array
    tempSize = pLibDev->sizeRegArray;
	fieldDetails = (ATHEROS_REG_FILE *)_lfind(fieldName, pLibDev->regArray, &tempSize, 
                sizeof(ATHEROS_REG_FILE), compareFields);

    if(fieldDetails == NULL) {
        mError(devNum, EINVAL, "Device Number %d:%s fieldName not found\n", devNum, fieldName);
        return;
    }
    

	updateField(devNum, fieldDetails, newValue, 0);
	return;
}    
	
	

void updateField
(
 A_UINT32 devNum,
 ATHEROS_REG_FILE *fieldDetails,
 A_UINT32 newValue,
 A_BOOL immediate
)
{
	LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
    A_UINT32         i, j; 
    A_UINT32         clearMask;
    A_UINT32         *pValue = NULL;
	A_UINT32		 cfgVersion;
	A_UINT32		 modeIndex;
	A_UCHAR			 bankMask;
	A_UINT32		 regValue;


    //check that the value if not too big for the field size
	//note can't do this check if its a signed value, will just have
	//to crop the value to its field size
 	if((!fieldDetails->valueSigned) && (newValue > fieldDetails->maxValue)) {
        mError(devNum, EINVAL, "Device Number %d:updateField: field %s value [%d] is too large for field size [max=%d]\n", devNum, 
				fieldDetails->fieldName, newValue, fieldDetails->maxValue);
        return;
    }
	
	if (fieldDetails->valueSigned) {
		newValue  = newValue & fieldDetails->maxValue;
	}
    
    //change the value in reg array
    cfgVersion = ar5kInitData[pLibDev->ar5kInitIndex].cfgVersion;
	if((pLibDev->turbo == TURBO_ENABLE) && (cfgVersion == 0)) {
        fieldDetails->fieldTurboValue = newValue;
    }
    else {
        fieldDetails->fieldBaseValue = newValue;
    }

	if(cfgVersion >= 2) {
		//check to see if this is a field that exists in the mode section,
		//if so then update the mode specific value to the new value
		//note in some cases we may overwrite the mode value with the same value, thats OK
		modeIndex = fieldDetails->softwareControlled; //index to mode reg
		if(fieldDetails->existsInEepromOrMode) { //this field exists in mode section
			switch(pLibDev->mode) {
			case MODE_11A:	//11a
				if(pLibDev->turbo != TURBO_ENABLE) {	//11a base
					pLibDev->pModeArray[modeIndex].value11a = newValue;
				}
				else {			//11a turbo
					pLibDev->pModeArray[modeIndex].value11aTurbo = newValue;
				}

				break;

			case MODE_11G: //11g
			case MODE_11O: //ofdm@2.4
				if((pLibDev->turbo != TURBO_ENABLE) || (cfgVersion < 3)) {
					pLibDev->pModeArray[modeIndex].value11g = newValue;
				}
				else {
					pLibDev->pModeArray[modeIndex].value11gTurbo = newValue;
				}
				break;

			case MODE_11B: //11b
				pLibDev->pModeArray[modeIndex].value11b = newValue;
				break;
			} //end switch
		}//end if mode
	}

    if(fieldDetails->radioRegister) {
        //regenerate values again
//		createRfPciValues(&pLibDev->regArray[pLibDev->rfRegArrayIndex], 
//                          pLibDev->rfRegArrayIndex, pLibDev->sizeRegArray, pLibDev->pRfPciValues);
		//work out the mask for this bank
		bankMask = 0x01;
		for(j = 0; j < fieldDetails->regOffset; j++) {
			bankMask = (A_UCHAR)((bankMask << 1) & 0xff);
		}

		if (immediate) {
			//also write out to the registers
			REGW(devNum, 0x9808, REGR(devNum, 0x9808) | 0x08000000);
			new_createRfPciValues(devNum, bankMask, 1);
			// Re-enable AGC
			if(keepAGCDisable) {
				printf("SNOOP: Not re-enabling AGC");
			} else {
				REGW(devNum, 0x9808, REGR(devNum, 0x9808) & (~0x08000000));
			}
		}
		else {
			new_createRfPciValues(devNum, bankMask, 0);
		}
    }
    else {
        //find address and update value
        for (i = 0; i < pLibDev->sizePciValuesArray; i++) {
            if(fieldDetails->regOffset == pLibDev->pciValuesArray[i].offset) {
                if((pLibDev->turbo == TURBO_ENABLE) && (cfgVersion == 0)) {
                    pValue = &(pLibDev->pciValuesArray[i].turboValue);
                }
                else {
                    pValue = &(pLibDev->pciValuesArray[i].baseValue);
                }
                break;
            }
        }

        if(NULL == pValue) {
            //don't expect to get here, means we didn't find the address of reg in pci array
            mError(devNum, EIO, "Device Number %d:updateField: Inexpected internal software error\n", devNum);
            return;
        }

        //do a modify on the value
        clearMask = ~(fieldDetails->maxValue << fieldDetails->fieldStartBitPos);
        *pValue =  *pValue & clearMask | (newValue << fieldDetails->fieldStartBitPos);

		if(immediate) {
			//also do a read modify write on the register value
			//read the register
			regValue = REGR(devNum, fieldDetails->regOffset);


			//modify the value and write back
			clearMask = ~(fieldDetails->maxValue << fieldDetails->fieldStartBitPos);
			regValue =  regValue & clearMask | (newValue << fieldDetails->fieldStartBitPos);

			REGW(devNum, fieldDetails->regOffset, regValue);
		}
    }
	return;
}

//change the register value without updating the software array
MANLIB_API void changeRegValueField
(
 A_UINT32 devNum,
 A_CHAR *fieldName, 
 A_UINT32 newValue
)
{
	LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
    ATHEROS_REG_FILE *fieldDetails;
    size_t     tempSize;
    A_UINT32   clearMask;
	A_UINT32   regValue;

    //check for the existance of the regArray before we start
    if(pLibDev->regArray == NULL) {
        mError(devNum, EIO, "Device Number %d:Software has no register file values, run resetDevice before changeField \n", devNum);
        return;
    }
    
    if(!strncmp(fieldName, "rf_", sizeof("rf_")))
	{
		mError(devNum, EIO, "Device Number %d:rf registers not supported by this function\n", devNum);
		return;
	}

	//search for the field name within the register array
    tempSize = pLibDev->sizeRegArray;
    fieldDetails = (ATHEROS_REG_FILE *)_lfind(fieldName, pLibDev->regArray, &tempSize, 
                sizeof(ATHEROS_REG_FILE), compareFields);

    if(fieldDetails == NULL) {
        mError(devNum, EINVAL, "Device Number %d:%s fieldName not found\n", devNum, fieldName);
        return;
    }
    
   //check that the value if not too big for the field size
	//note can't do this check if its a signed value, will just have
	//to crop the value to its field size
 	if((!fieldDetails->valueSigned) && (newValue > fieldDetails->maxValue)) {
        mError(devNum, EINVAL, "Device Number %d:changeRegValueField field %s value is too large for field size\n", devNum, 
				fieldDetails->fieldName);
        return;
    }
	
	if (fieldDetails->valueSigned) {
		newValue  = newValue & fieldDetails->maxValue;
	}
 
	regValue = REGR(devNum, fieldDetails->regOffset);


	//modify the value and write back
	clearMask = ~(fieldDetails->maxValue << fieldDetails->fieldStartBitPos);
	regValue =  regValue & clearMask | (newValue << fieldDetails->fieldStartBitPos);

	REGW(devNum, fieldDetails->regOffset, regValue);
	return;
}

/* read the register to get the value of the field.  Does a mask and shift 
   to return only the value of the field */
MANLIB_API void readField
(
 A_UINT32	devNum,
 A_CHAR		*fieldName,
 A_UINT32	*pUnsignedValue,			//returns unsigned value
 A_INT32	*pSignedValue,				//returns signed value
 A_BOOL		*pSignedFlag				//return true if this is a signed value
)
{
	LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
    ATHEROS_REG_FILE *fieldDetails;
    size_t		     tempSize;
	A_UINT32		 regValue;
	A_UINT32		 fieldValue;
	A_UINT32		 signedBit;

	if (checkDevNum(devNum) == FALSE) {
		mError(devNum, EINVAL, "Device Number %d:readField\n", devNum);
		return;
	}

    //check for the existance of the regArray before we start
    if(pLibDev->regArray == NULL) {
        mError(devNum, EIO, "Device Number %d:Software has no register file values, run resetDevice before readField \n", devNum);
        return;
    }
    

	//see if this is an rf register.  rf registers not supported
	if(strncmp(fieldName, "rf", 2) == 0) {
		mError(devNum, EINVAL, "Device Number %d:rf register reading is not supported\n", devNum);
		return;
	}

    //search for the field name within the register array
    tempSize = pLibDev->sizeRegArray;
    fieldDetails = (ATHEROS_REG_FILE *)_lfind(fieldName, pLibDev->regArray, &tempSize, 
                sizeof(ATHEROS_REG_FILE), compareFields);

    if(fieldDetails == NULL) {
        mError(devNum, EINVAL, "Device Number %d:%s fieldName not found\n", devNum, fieldName);
        return;
    }
    
	if(!fieldDetails->readable) {
		mError(devNum, EIO, "Device Number %d:%s field is not readable\n", devNum, fieldName);
		return;
	}
	
	//read the register
	regValue = REGR(devNum, fieldDetails->regOffset);

	//mask and shift to get just the field value
	fieldValue = (regValue >> fieldDetails->fieldStartBitPos) & fieldDetails->maxValue;
	
	if (fieldDetails->valueSigned) {
		*pSignedFlag = 1;
				
		*pSignedValue = fieldValue;		//will contain signed representation of number
		*pUnsignedValue = fieldValue;	//will contain unsigned representation of number

		//see if the value is negative
		signedBit = 1 << (fieldDetails->fieldSize - 1);

		if(fieldValue & signedBit) {
			*pSignedValue = ((~(*pSignedValue) & fieldDetails->maxValue) + 1) & fieldDetails->maxValue;
			*pSignedValue *= -1;
		}
	}
	else {
		*pUnsignedValue = fieldValue;
		*pSignedFlag = 0;
	}

    return;
}

/* do a read modify write on the field */
MANLIB_API void writeField
(
 A_UINT32 devNum,
 A_CHAR *fieldName, 
 A_UINT32 newValue
)
{
	LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
    ATHEROS_REG_FILE *fieldDetails;
    size_t      tempSize;

	if (checkDevNum(devNum) == FALSE) {
		mError(devNum, EINVAL, "Device Number %d:writeField\n", devNum);
		return;
	}

    //check for the existance of the regArray before we start
    if(pLibDev->regArray == NULL) {
        mError(devNum, EIO, "Device Number %d:Software has no register file values, run resetDevice before writeField \n", devNum);
        return;
    }
    
	//see if this is an rf register.  rf registers ARE NOW supported
//	if(strncmp(fieldName, "rf", 2) == 0) {
//		mError(EINVAL, "rf register reading is not supported\n");
//		return;
//	}

    //search for the field name within the register array
    tempSize = pLibDev->sizeRegArray;
	fieldDetails = (ATHEROS_REG_FILE *)_lfind(fieldName, pLibDev->regArray, &tempSize, 
                sizeof(ATHEROS_REG_FILE), compareFields);

    if(fieldDetails == NULL) {
        mError(devNum, EINVAL, "Device Number %d:%s fieldName not found\n", devNum, fieldName);
        return;
    }
    
   	updateField(devNum, fieldDetails, newValue, 1);


	return;
}


MANLIB_API void changeMultipleFields
(
 A_UINT32		  devNum,
 PARSE_FIELD_INFO *pFieldsToChange,
 A_UINT32		  numFields
)
{
	A_UINT32	i;
	LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
    size_t		     tempSize;
    ATHEROS_REG_FILE *fieldDetails;
	A_UINT32		newValue;
	A_UINT32		cfgVersion;

    cfgVersion = ar5kInitData[pLibDev->ar5kInitIndex].cfgVersion;

	if (checkDevNum(devNum) == FALSE) {
		mError(devNum, EINVAL, "Device Number %d:writeField\n", devNum);
		return;
	}

    //check for the existance of the regArray before we start
    if(pLibDev->regArray == NULL) {
        mError(devNum, EIO, "Device Number %d:Software has no register file values, run resetDevice before writeField \n", devNum);
        return;
    }

    tempSize = pLibDev->sizeRegArray;
	for(i = 0; i < numFields; i++) {
		fieldDetails = (ATHEROS_REG_FILE *)_lfind(pFieldsToChange[i].fieldName, pLibDev->regArray, &tempSize, 
					sizeof(ATHEROS_REG_FILE), compareFields);

		if(fieldDetails == NULL) {
			mError(devNum, EINVAL, "Device Number %d:changeMultiFields: %s fieldName not found i = %d, numFields = %d\n", devNum, pFieldsToChange[i].fieldName, i, numFields);
			return;
		}


        if (!getUnsignedFromStr(devNum, pFieldsToChange[i].valueString, (A_BOOL)fieldDetails->valueSigned, 
                fieldDetails->fieldSize,
                &newValue)) {
            mError(devNum, EINVAL, "Device Number %d:problem with base value on line %d\n", devNum, i);
			return;
        }

		updateField(devNum, fieldDetails, newValue, 0);
		if(cfgVersion == 0) {
			//for this case we need to change the turbo field also (mainly for AP)
			pLibDev->turbo = !(pLibDev->turbo);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久精品日日| 一区在线观看免费| 99久久婷婷国产| 无吗不卡中文字幕| 日本一区二区动态图| 欧美精品久久久久久久多人混战 | 国产精品剧情在线亚洲| 欧美一级日韩一级| jlzzjlzz欧美大全| 国产一级精品在线| 亚洲第一福利一区| 亚洲欧洲性图库| 精品不卡在线视频| 精品视频免费看| 色婷婷久久99综合精品jk白丝| 久久99这里只有精品| 亚洲成人在线观看视频| 综合久久一区二区三区| 国产亚洲欧美激情| 精品久久国产字幕高潮| 欧美日韩国产片| 色婷婷av久久久久久久| 成人精品免费网站| 国产成人av影院| 精品夜夜嗨av一区二区三区| 天天亚洲美女在线视频| 夜夜嗨av一区二区三区中文字幕| 国产精品美女久久久久久| 久久久美女毛片| 2020日本不卡一区二区视频| 日韩欧美一区二区久久婷婷| 制服丝袜中文字幕一区| 欧美日韩成人一区二区| 欧美日韩在线精品一区二区三区激情 | 亚洲一区av在线| 亚洲欧美综合另类在线卡通| 国产日韩欧美一区二区三区乱码 | 欧美日韩在线播放| 色婷婷香蕉在线一区二区| 99vv1com这只有精品| 91视频在线看| 色八戒一区二区三区| 91国偷自产一区二区三区成为亚洲经典| 成a人片亚洲日本久久| 成人avav影音| 91麻豆文化传媒在线观看| 91丨porny丨户外露出| 91激情五月电影| 欧美三电影在线| 日韩三级免费观看| 欧美va天堂va视频va在线| 精品国产自在久精品国产| 久久久久久日产精品| 日本一区二区免费在线| 国产精品拍天天在线| 亚洲情趣在线观看| 日韩中文字幕区一区有砖一区 | 国产精品亚洲一区二区三区在线 | 国产一区二区三区精品视频| 国产精品1区2区3区| 不卡区在线中文字幕| 91国偷自产一区二区开放时间| 欧美性视频一区二区三区| 欧美日韩精品一区二区三区蜜桃| 91.麻豆视频| 久久精品这里都是精品| 成人免费一区二区三区视频| 亚洲电影你懂得| 精品亚洲国产成人av制服丝袜 | 精品一区二区三区影院在线午夜| 精品一区二区三区免费视频| 成人综合在线网站| 欧美中文字幕一二三区视频| 欧美电影免费观看高清完整版在| 国产三级一区二区三区| 亚洲乱码日产精品bd| 日韩av中文在线观看| 国内精品国产三级国产a久久| av中文一区二区三区| 精品视频在线视频| 中文字幕欧美日韩一区| 亚洲一区二区三区自拍| 狠狠色狠狠色综合日日91app| 99re6这里只有精品视频在线观看| 欧美日韩国产小视频在线观看| 精品国产不卡一区二区三区| 中文字幕在线不卡| 蜜桃视频第一区免费观看| k8久久久一区二区三区 | 成人欧美一区二区三区小说| 日韩精品欧美精品| 成人a免费在线看| 欧美一级久久久久久久大片| 亚洲日本韩国一区| 精品制服美女久久| 色哟哟日韩精品| 国产亚洲欧洲997久久综合 | 国产午夜亚洲精品午夜鲁丝片 | 另类成人小视频在线| 91免费看片在线观看| 欧美精品一区二区久久久| 一个色综合网站| 国产99久久久精品| 欧美一级久久久| 午夜精品久久久久久久99水蜜桃| 成人伦理片在线| 久久久久久久久久久99999| 日韩国产欧美视频| 91免费看片在线观看| 日本一区二区免费在线观看视频 | 天天影视色香欲综合网老头| 91香蕉国产在线观看软件| 久久久影院官网| 看国产成人h片视频| 精品视频一区二区三区免费| 一区二区三区在线观看动漫 | 91精品国产综合久久久久久漫画| 亚洲同性gay激情无套| 国产成人亚洲综合a∨婷婷图片 | 久久综合999| 麻豆精品在线视频| 91精品国产免费| 亚洲不卡av一区二区三区| 99re成人在线| 亚洲欧美在线观看| www.亚洲色图.com| 1024成人网色www| 成人午夜伦理影院| 国产精品网站在线| 成人免费视频国产在线观看| 欧美国产国产综合| 国产99一区视频免费| 中文字幕+乱码+中文字幕一区| 国产精品一卡二卡在线观看| 久久久久久一二三区| 国产黄色精品视频| 国产视频一区不卡| 99精品视频一区| 亚洲精品美国一| 欧美影视一区在线| 亚洲va欧美va人人爽| 91精品免费观看| 蜜臀国产一区二区三区在线播放| 日韩一区二区在线免费观看| 久久精品国内一区二区三区| 精品久久人人做人人爱| 国产一区二区不卡老阿姨| 欧美激情在线看| 91女人视频在线观看| 亚洲综合自拍偷拍| 3d动漫精品啪啪一区二区竹菊 | 亚洲线精品一区二区三区八戒| 在线一区二区三区做爰视频网站| 亚洲黄色性网站| 欧美一级夜夜爽| 国产成人精品一区二区三区网站观看| 国产色婷婷亚洲99精品小说| 99国产精品久久久久久久久久| 亚洲免费看黄网站| 欧美精品乱人伦久久久久久| 极品销魂美女一区二区三区| 国产精品天干天干在观线| 91精品办公室少妇高潮对白| 日韩国产高清在线| 国产欧美一区在线| 91激情在线视频| 久久精品国产久精国产爱| 国产精品天天摸av网| 欧美日韩一级视频| 狠狠色综合播放一区二区| 国产精品激情偷乱一区二区∴| 欧美亚洲尤物久久| 国内精品视频666| 亚洲精品国产精品乱码不99| 欧美精品自拍偷拍动漫精品| 国产酒店精品激情| 亚洲午夜久久久久| 久久综合狠狠综合| 在线亚洲欧美专区二区| 九色综合狠狠综合久久| 亚洲欧美色图小说| 亚洲精品一区二区三区影院| 色噜噜狠狠成人网p站| 久草中文综合在线| 一区二区三区在线视频免费观看| 精品电影一区二区| 在线影院国内精品| 国产91丝袜在线播放0| 偷拍一区二区三区四区| 国产精品麻豆视频| 日韩区在线观看| 在线观看日韩国产| 国产大片一区二区| 蜜桃精品在线观看| 亚洲影视在线观看| 国产欧美一二三区| 日韩午夜电影在线观看| 91成人看片片| 99久久综合色| 国产老妇另类xxxxx|