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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? athreg.c

?? Atheros AP Test with Agilent N4010A source code
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* athreg.c - contians functions for managing Atheros register files */
/* Copyright (c) 2002 Atheros Communications, Inc., All Rights Reserved */

#ident  "ACI $Id: //depot/sw/branches/ART_V53_dragon/sw/src/dk/mdk/devlib/athreg.c#3 $, $Header: //depot/sw/branches/ART_V53_dragon/sw/src/dk/mdk/devlib/athreg.c#3 $"


#ifdef __ATH_DJGPPDOS__
#include <unistd.h>
#ifndef EILSEQ  
    #define EILSEQ EIO
#endif	// EILSEQ

#define __int64	long long
#define HANDLE long
typedef unsigned long DWORD;
#define Sleep	delay
#endif	// #ifdef __ATH_DJGPPDOS__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include "wlantype.h"
#include "athreg.h"
#include "manlib.h"
#include "mEeprom.h"
#include "mConfig.h"
#include "mDevtbl.h"
#include "artEar.h"
#include <errno.h>
#ifndef VXWORKS
#include <search.h>
#endif

#if defined(SOC_LINUX)
#define _lfind lfind
#endif
#if defined (VXWORKS) || defined (__ATH_DJGPPDOS__)
void *_lfind(const void *key,const void *base0,size_t *nmemb,size_t size,int (* compar)(const void *,const void *));
#endif

static A_BOOL getUnsignedFromStr( A_UINT32 devNum, A_CHAR *inString, A_BOOL signedValue, A_UINT16 fieldSize, A_UINT32 *returnValue);
static A_BOOL getBitFieldValues( A_UINT32 devNum, A_CHAR  *pString, ATHEROS_REG_FILE *pFieldDetails);
static A_UINT16 createRfPciValues(const ATHEROS_REG_FILE *pRfFields, A_UINT32 indexRfField, A_UINT32 sizeRegArray, PCI_REG_VALUES *pRfWriteValues);
static int compareFields(const void *arg1, const void *arg2);
static A_UINT16 ParseRfRegs(A_UINT32 devNum, ATHEROS_REG_FILE *pRfFields, A_UINT32 indexRfField, A_UINT32         sizeRegArray,
 PCI_REG_VALUES *pRfWriteValues, RF_REG_INFO	*pRfRegBanks);
static A_UINT16 createRfBankPciValues(A_UINT32 devNum, RF_REG_INFO	*pRfRegBank);
static A_UINT16 new_createRfPciValues(A_UINT32 devNum, A_UINT32 bank, A_BOOL writePCI);
static void writeRfBank(A_UINT32 devNum, RF_REG_INFO	*pRfRegBank);


// non-ansi functions are mapped to some equivalent functions
#ifdef LINUX
#include <ctype.h>
#include "linux_ansi.h"
#endif

static A_BOOL  keepAGCDisable = 0;

A_UINT32 reverseRfBits(A_UINT32 val, A_UINT16 bit_count, A_BOOL dontReverse);

char delimiters[]   = " \t\n";

A_INT8 start_strcmp(A_CHAR *substring, A_CHAR *string) {

	A_UINT32 iIndex, ssLen, sLen;
	ssLen = strlen(substring);
	sLen = strlen(string);

	if (sLen < ssLen) return 1;

	for(iIndex=0;iIndex<ssLen;iIndex++) {
		if (tolower(string[iIndex]) == tolower(substring[iIndex]))
			continue;
		else 
			return 1;
	}
	return 0;

}

/**************************************************************************
* parseAtherosRegFile - Parse the register file to produce C array
*
* Returns: TRUE if file parsed successfully, FALSE otherwise.
*/
A_BOOL
parseAtherosRegFile
(
 LIB_DEV_INFO *pLibDev,
 char *filename
)
{
    FILE        *fileStream;
    A_CHAR      lineBuffer[MAX_FILE_WIDTH];
    A_CHAR      fieldBaseValueString[MAX_FILE_WIDTH];
    A_CHAR      fieldTurboValueString[MAX_FILE_WIDTH];
    A_CHAR      *token;
    A_UINT32    currentLineNumber = 0;
    A_BOOL      returnValue = 1;
    A_BOOL      fileError = 0;
    A_UINT32    signedValue;
    A_UINT16    i, j;
    A_UINT32    tempValue;
    ATHEROS_REG_FILE    fieldInfoIn;
    ATHEROS_REG_FILE    *pFieldDetails = NULL;
    MODE_INFO    modeFieldInfoIn;
    MODE_INFO    *pModeFieldDetails = NULL;
    size_t     tempSize;
	A_BOOL		modeSpecific = 0;
	A_UINT32    tempSwField;
	A_BOOL		tempModeField;
	A_UINT32	cfgVersion = 0;

#ifndef MDK_AP    
    if(*filename == '\0') {
        //user has chosen to go with default values
#ifndef NO_LIB_PRINT		
	printf("Using defaults from : \n\t%s\n\n", ar5kInitData[pLibDev->ar5kInitIndex].pCfgFileVersion);
#endif
        return 1;
    }
// file processing removed till flash filesystem is up
    //open file
    fileStream = fopen(filename, "r");
    if (NULL == fileStream) {
        mError(pLibDev->devNum, EINVAL, "Unable to open atheros text file - %s\n", filename);
        return 0;
    }
#ifndef NO_LIB_PRINT		
    printf("Using the values from configuration file %s\n\n", filename);
#endif

	memset(&fieldInfoIn, 0, sizeof(ATHEROS_REG_FILE));
	memset(&modeFieldInfoIn, 0, sizeof(MODE_INFO));

    
    //start reading lines and parsing info
    while (!fileError) {
        if (fgets( lineBuffer, MAX_FILE_WIDTH, fileStream ) == NULL) {
            break;
        }

        currentLineNumber++;
        //check for this being a comment line
        if (lineBuffer[0] == '#') {
            //comment line
            continue;
        }

        //extract value from the line
        token = strtok( lineBuffer, delimiters );
        if (NULL == token) {
            //blank line
            continue;
        }
        //process command lines
		if(token[0] == '@') {
	        if(strnicmp("@FORMAT:", token, strlen("@FORMAT:")) == 0) {
				token = strtok( NULL, delimiters ); //get FORMAT number
				if(NULL == token) {
					printf("Bad @FORMAT syntax at line %d\n", currentLineNumber);
				    fclose(fileStream);
					return 0;
				}

				if(!sscanf(token, "%ld", &cfgVersion)) {
					printf("Bad @FORMAT syntax at line %d\n", currentLineNumber);
				    fclose(fileStream);
					return 0;
				}
				
			}
	        else if(strnicmp("@MODE:", token, strlen("@MODE:")) == 0) {
				token = strtok( NULL, delimiters ); //get MODE type
				if(NULL == token) {
					printf("Bad @MODE syntax at line %d\n", currentLineNumber);
				    fclose(fileStream);
					return 0;
				}
		        
				/*
				 * for now only care about finding the mode specific section, 
				 * ignore everything else
				 */
				if(strnicmp("MODE_SPECIFIC", token, strlen("MODE_SPECIFIC")) == 0) {
					modeSpecific = 1;
				}
				
			}

			//continue and get next line
			continue;
			
		}

        if(token[0] == '*') {
			//set flag to create section in mode specific section, point past *
			token++;
		}

        for(i = FIELD_NAME; (i <= PUBLIC_NAME) && !fileError && !modeSpecific; i++) {

            switch(i) {
            case FIELD_NAME:
			    //zero out the local structure at start or new field
				memset(&fieldInfoIn, 0, sizeof(ATHEROS_REG_FILE));
                if(strlen(token) > MAX_NAME_LENGTH) {
                    mError(pLibDev->devNum, EINVAL, "field name on line is more than %d characters\n", 
                                    currentLineNumber, MAX_NAME_LENGTH);
                    fileError = 1;
                    break;
                }
 
                //search for this field within default array
                tempSize = pLibDev->sizeRegArray;
                pFieldDetails = (ATHEROS_REG_FILE *)_lfind(token, pLibDev->regArray, &tempSize, sizeof(ATHEROS_REG_FILE), compareFields);

                if(pFieldDetails == NULL) {
                    mError(pLibDev->devNum, EINVAL, "%s fieldName at line number %d not found\n", 
                                token, currentLineNumber);
                    fileError = 1;
                    break;

                }

                strcpy(fieldInfoIn.fieldName, token);

                if(strncmp((char *)strlwr(token), "rf", 2) == 0) {
                    //this is a radio register, needs special consideration later
                    fieldInfoIn.radioRegister = 1;
                }
                else {
                    fieldInfoIn.radioRegister = 0;
                }
                break;

            case BASE_VALUE:
                //store off the field value till later to see whether it is signed or not
                strcpy(fieldBaseValueString, token);
                break;

            case TURBO_VALUE:
                if(0 == cfgVersion) {
					//store off the field value till later to see whether it is signed or not
					strcpy(fieldTurboValueString, token);
					break;
				}
				else {
					//if this is version 2 cfg file, there is no turbo, 
					//so increment i and fall through to next column, hence no break.
					i++;
				}
                
            case REG_NAME:
                if(strlen(token) > MAX_NAME_LENGTH) {
                    mError(pLibDev->devNum, EINVAL, "register name on line is more than %d characters\n", 
                                    currentLineNumber, MAX_NAME_LENGTH);
					printf("err C : %d > %d\n", strlen(token), MAX_NAME_LENGTH);
                    fileError = 1;
                    break;
                }
                strcpy(fieldInfoIn.regName, token);
                break;

            case REG_OFFSET:
                if (!getUnsignedFromStr(pLibDev->devNum, token, 0, 0, &fieldInfoIn.regOffset)) {
                    mError(pLibDev->devNum, EINVAL, "problem with reg offset value on line %d\n", currentLineNumber);
					printf("err D \n");
                    fileError = 1;
                    break;
                }
                break;

            case BIT_RANGE:
                if (!getBitFieldValues(pLibDev->devNum, token, &fieldInfoIn)) {    
                    mError(pLibDev->devNum, EINVAL, "problem with bit range field on line %d\n", currentLineNumber);
					printf("err E \n");
                    fileError = 1;
                    break;
                }

                //create and add maxValue/mask
                fieldInfoIn.maxValue = 0;
                for(j = 0; j < fieldInfoIn.fieldSize; j++) {
                    fieldInfoIn.maxValue |= (0x1 << j);
                }
                
                break;

            case VALUE_SIGNED:
                if (!getUnsignedFromStr(pLibDev->devNum, token, 0, 0, &signedValue)) {
                    mError(pLibDev->devNum, EINVAL, "problem with value is signed flag on line %d\n", currentLineNumber);
					printf("err F \n");
                    fileError = 1;
                    break;
                }

				if((signedValue != 0) && (signedValue != 1) && !fieldInfoIn.radioRegister) {
                    mError(pLibDev->devNum, EINVAL, "value of signed flag should be 0 or 1 on line %d\n", currentLineNumber);
                    fileError = 1;
                    break;
                }

                fieldInfoIn.valueSigned = (A_BOOL)signedValue;

                if(fieldInfoIn.radioRegister) {
                    if (signedValue > 3) {
                        mError(pLibDev->devNum, EINVAL, "bad rf register number on line %d\n", currentLineNumber);
                        fileError = 1;
                        break;
                    }
                    fieldInfoIn.rfRegNumber = (A_UCHAR)signedValue;
                }

                //can now do the conversions for base and turbo values
                if (!getUnsignedFromStr(pLibDev->devNum, fieldBaseValueString, (A_BOOL)signedValue, 
                        fieldInfoIn.fieldSize,
                        &fieldInfoIn.fieldBaseValue)) {
                    mError(pLibDev->devNum, EINVAL, "problem with base value on line %d\n", currentLineNumber);
                    fileError = 1;
                }
 
                if (fieldInfoIn.fieldBaseValue > fieldInfoIn.maxValue) {
                    mError(pLibDev->devNum, EINVAL, 
                        "base value is too large for field size on line %d\n", currentLineNumber);
                    fileError = 1;
                    break;
                }
                    
                if(0 == cfgVersion) {
					if (strcmp((char *)strlwr(fieldTurboValueString), "nc") != 0) {
						if (!getUnsignedFromStr(pLibDev->devNum, fieldTurboValueString, (A_BOOL)signedValue, 
							fieldInfoIn.fieldSize,
							&fieldInfoIn.fieldTurboValue)) {
							mError(pLibDev->devNum, EINVAL, "problem with turbo value on line %d\n", currentLineNumber);
							fileError = 1;
							break;
						}
					}
					else {
						//turbo value is the same as the base value
						fieldInfoIn.fieldTurboValue = fieldInfoIn.fieldBaseValue;
					}

					if (fieldInfoIn.fieldTurboValue > fieldInfoIn.maxValue)  {
						mError(pLibDev->devNum, EINVAL, 
							"turbo value is too large for field size on line %d\n", currentLineNumber);
						fileError = 1;
						break;
					}
				}
				else {
					//Turbo value is not coming from this array, it will come from mode specific
					fieldInfoIn.fieldTurboValue = 0;
				}
                break;

            case REG_WRITABLE:
                if (!getUnsignedFromStr(pLibDev->devNum, token, 0, 0, &tempValue)) {
                    mError(pLibDev->devNum, EINVAL, "problem with writable flag on line %d\n", currentLineNumber);
                    fileError = 1;
                    break;
                }
    
                if((tempValue != 0) && (tempValue != 1)) {
                    mError(pLibDev->devNum, EINVAL, "writable flag should be 0 or 1 on line %d\n", currentLineNumber);
                    fileError = 1;
                    break;
                }
                fieldInfoIn.writable = (A_BOOL)tempValue;
                break;

            case REG_READABLE:
                if (!getUnsignedFromStr(pLibDev->devNum, token, 0, 0, &tempValue)) {
                    mError(pLibDev->devNum, EINVAL, "problem with readable flag on line %d\n", currentLineNumber);
                    fileError = 1;
                    break;
                }

                if((tempValue != 0) && (tempValue != 1)) {
                    mError(pLibDev->devNum, EINVAL, "readable flag should be 0 or on line %d\n", currentLineNumber);
                    fileError = 1;
                    break;
                }
                
                fieldInfoIn.readable = (A_BOOL)tempValue;
                break;

            case SW_CONTROLLED:
                if (!getUnsignedFromStr(pLibDev->devNum, token, 0, 0, &tempValue)) {
                    mError(pLibDev->devNum, EINVAL, "problem with software controlled flag on line %d\n", currentLineNumber);
                    fileError = 1;
                    break;
                }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
无吗不卡中文字幕| 色av成人天堂桃色av| 91麻豆自制传媒国产之光| 在线不卡免费欧美| 国产精品久久综合| 麻豆一区二区99久久久久| 欧美最新大片在线看 | 激情综合网av| 色婷婷av一区| 日本一区二区免费在线| 老司机免费视频一区二区三区| 色av综合在线| 亚洲人成网站在线| 欧美日韩国产高清一区| 中文字幕av一区二区三区高| 老司机一区二区| 欧美日本一道本在线视频| 亚洲人一二三区| 成人天堂资源www在线| 精品少妇一区二区三区视频免付费 | 成人一区二区三区视频在线观看| 欧美精品自拍偷拍| 亚洲伦在线观看| 国产精品69久久久久水密桃| 3d成人动漫网站| 亚洲一二三专区| 97aⅴ精品视频一二三区| 国产精品欧美一级免费| 国产成人精品综合在线观看| 精品国产1区二区| 国内久久精品视频| 日韩视频一区二区三区| 青青草伊人久久| 欧美人成免费网站| 亚洲成av人**亚洲成av**| 欧美性大战久久| 亚洲成人在线观看视频| 欧美日韩日本视频| 日韩电影网1区2区| 日韩一区二区在线看片| 麻豆视频观看网址久久| 日韩欧美色电影| 黑人巨大精品欧美黑白配亚洲| 精品国产凹凸成av人网站| 麻豆成人综合网| 欧美大片日本大片免费观看| 久久99精品国产麻豆婷婷| 精品国产乱码久久久久久蜜臀 | 久久99精品久久久久久| 久久久五月婷婷| 成人av资源网站| 一级中文字幕一区二区| 欧美剧在线免费观看网站| 日本va欧美va瓶| 国产亚洲精品中文字幕| 91色在线porny| 午夜伊人狠狠久久| 精品毛片乱码1区2区3区| 岛国精品在线播放| 艳妇臀荡乳欲伦亚洲一区| 欧美日韩mp4| 九九九久久久精品| 国产精品视频一二三区| 欧洲日韩一区二区三区| 美女爽到高潮91| 中文字幕日韩av资源站| 欧美视频在线一区| 国产一区二区久久| 亚洲精品伦理在线| 日韩欧美久久久| 色综合久久88色综合天天免费| 日韩av在线发布| 中文字幕免费不卡| 欧美精品 日韩| 成人午夜在线免费| 婷婷综合五月天| 日本一区二区成人在线| 欧美三级视频在线| 国产69精品久久99不卡| 丝瓜av网站精品一区二区 | 一区二区三区在线播放| 91精品国产乱码| 成人晚上爱看视频| 美女视频网站黄色亚洲| 亚洲人成在线观看一区二区| 日韩久久久久久| 欧洲av一区二区嗯嗯嗯啊| 国产精品中文字幕欧美| 亚洲成a人v欧美综合天堂| 国产视频一区在线观看 | 亚洲色图在线看| 精品国产精品网麻豆系列| 在线欧美小视频| 国产成人精品影视| 韩国v欧美v亚洲v日本v| 视频一区二区三区中文字幕| 日韩码欧中文字| 国产精品乱码妇女bbbb| 久久久一区二区| 欧美一区二区三区在线观看视频| 色综合咪咪久久| 99久久综合精品| 国产成人a级片| 韩国欧美国产1区| 美腿丝袜亚洲一区| 日韩精品一区第一页| 亚洲线精品一区二区三区| 亚洲欧洲制服丝袜| 国产精品久久久久久久久免费桃花 | 欧美精品一区二区精品网| 欧美老年两性高潮| 精品污污网站免费看| 色呦呦一区二区三区| 99免费精品在线| 91日韩精品一区| 91丝袜美女网| 色综合天天综合狠狠| 91免费小视频| 在线视频一区二区三区| 在线精品视频免费观看| 欧美在线影院一区二区| 欧美日韩三级一区二区| 3atv一区二区三区| 精品日韩99亚洲| 日本一不卡视频| 狠狠色丁香婷婷综合| 国产suv精品一区二区6| hitomi一区二区三区精品| 99视频热这里只有精品免费| 99精品热视频| 欧美人与禽zozo性伦| 日韩精品影音先锋| 国产欧美日韩视频在线观看| 国产精品萝li| 午夜精品久久久久久久| 青青青伊人色综合久久| 国产另类ts人妖一区二区| 成人综合婷婷国产精品久久免费| 成人激情黄色小说| 欧美三区免费完整视频在线观看| 在线成人小视频| 国产日韩欧美综合在线| 亚洲精品视频在线| 青青草97国产精品免费观看无弹窗版 | 欧美一区二区三区在| 精品久久一区二区三区| 椎名由奈av一区二区三区| 五月激情综合色| 丰满岳乱妇一区二区三区| 在线观看91视频| 精品奇米国产一区二区三区| 国产精品久久夜| 日本91福利区| 99re这里都是精品| 日韩欧美国产高清| 亚洲欧美另类在线| 久久精品国产99久久6| 色综合视频在线观看| 精品国产一区二区亚洲人成毛片| 国产精品色婷婷| 日韩精品成人一区二区在线| 粉嫩一区二区三区性色av| 欧美日韩和欧美的一区二区| 久久久影院官网| 视频一区在线播放| 色综合久久精品| 久久精品视频免费| 日韩成人av影视| 欧洲一区在线电影| 国产精品人妖ts系列视频| 男人的天堂久久精品| 91片黄在线观看| 午夜精品福利在线| 99麻豆久久久国产精品免费优播| 日韩欧美美女一区二区三区| 亚洲综合丝袜美腿| 99久久久久久99| 久久综合九色综合97婷婷| 天天影视涩香欲综合网| 成人av免费网站| www激情久久| 美女视频一区二区三区| 欧美高清dvd| 亚洲一区欧美一区| 91在线高清观看| 欧美国产一区二区| 国产盗摄视频一区二区三区| 欧美一区二区视频在线观看| 亚洲va欧美va天堂v国产综合| aaa亚洲精品| 国产精品久久久久9999吃药| 懂色av中文一区二区三区| 亚洲精品一区二区精华| 老司机精品视频在线| 欧美一区二区不卡视频| 日韩电影在线观看网站| 337p亚洲精品色噜噜噜| 日韩国产精品大片| 在线播放日韩导航| 天堂va蜜桃一区二区三区漫画版|