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

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

?? artear.c

?? Atheros AP Test with Agilent N4010A source code
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* artEar.c - contians functions for managing EAR in ART */
/* Copyright (c) 2003 Atheros Communications, Inc., All Rights Reserved */

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


#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 <stdlib.h>
#include <string.h>  // For memset() call
#include "wlantype.h"
#include "athreg.h"
#include "manlib.h"
#include "mConfig.h"
#include <errno.h>

#include "artEar.h"

int EarDebugLevel = EAR_DEBUG_OFF; //EAR_DEBUG_VERBOSE; 

static A_UINT16
ar5212EarDoRH(A_UINT32 devNum, REGISTER_HEADER *pRH);

static RF_REG_INFO *
ar5212GetRfBank(A_UINT32 devNum, A_UINT16 bank);

static A_UINT16
ar5212CFlagsToEarMode(A_UINT32 devNum);

static A_BOOL
ar5212IsChannelInEarRegHead(A_UINT16 earChannel, A_UINT16 channelMhz);

static void
ar5212ModifyRfBuffer(RF_REG_INFO *pRfRegs, A_UINT32 reg32, A_UINT32 numBits,
                     A_UINT32 firstBit, A_UINT32 column);

static void
showEarAlloc(EAR_ALLOC *earAlloc);

/******************** EAR Entry Routines ********************/
/**************************************************************
 * ar5212IsEarEngaged
 *
 * Given the reset mode and channel - does the EAR exist and
 * does it have any changes for this mode and channel
 */
A_BOOL
ar5212IsEarEngaged(A_UINT32 devNum, EAR_HEADER   *pEarHead, A_UINT32 freq)
{
    int          i;
   	LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];

    if(!pLibDev->libCfgParams.loadEar) 
		{
//				printf("In ar5212IsEarEngaged pLibDev->libCfgParams.loadEar\n");
				return FALSE;
		}

	/* Check for EAR */
    if (!pEarHead) 
		{
			//	printf("pEarHead\n");
        return FALSE;
    }

    /* Check for EAR found some reg headers */
    if (pEarHead->numRHs == 0) 
		{
      // printf("pEarHead->numRHs\n");
				return FALSE;
    }

    /* Check register headers for match on channel and mode */
    for (i = 0; i < pEarHead->numRHs; i++)
		{
        if ((pEarHead->pRH[i].modes & ar5212CFlagsToEarMode(devNum)) &&
            ar5212IsChannelInEarRegHead(pEarHead->pRH[i].channel, (A_UINT16)freq))
        {
			//printf("ar5212IsChannelInEarRegHead\n");
            return TRUE;
        }
    }

    devNum = 0;   //quiet warnings
	//	printf("ar5212IsearEngaged\n");
	return FALSE;
}

/**************************************************************
 * ar5212EarModify
 *
 * The location sensitive call the can enable/disable calibrations
 * or check for additive register changes
 */
A_BOOL
ar5212EarModify(A_UINT32 devNum, EAR_HEADER   *pEarHead, EAR_LOC_CHECK loc, A_UINT32 freq, A_UINT32 *modifier)
{
    int          i;

    if(pEarHead == NULL) {
		mError(devNum, EINVAL, "ar5212EarModify: earHead is NULL\n");
		return FALSE;
	}
    /* Should only be called if EAR is engaged */
    if(!ar5212IsEarEngaged(devNum, pEarHead, freq)) {
		mError(devNum, EINVAL, "ar5212EarModify: ear is not engaged\n");
		return FALSE;
	}

    /* Check to see if there are any EAR modifications for the given code location */
    for (i = 0; i < pEarHead->numRHs; i++) {
        /* Check register headers for match on channel and mode */
        if (pEarHead->pRH[i].modes & ar5212CFlagsToEarMode(devNum) &&
            ar5212IsChannelInEarRegHead(pEarHead->pRH[i].channel, (A_UINT16)freq))
        {
            switch (loc) {
                /* Stage: 0 */
            case EAR_LC_RF_WRITE:
                if (pEarHead->pRH[i].stage == EAR_STAGE_ANALOG_WRITE) {
                    if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                        printf("ar5212EarModify: Performing stage 0 ops on RH %d\n", i);
                    }
                    ar5212EarDoRH(devNum, &(pEarHead->pRH[i]));
                }
                break;
                /* Stage: 1 */
            case EAR_LC_PHY_ENABLE:
                if (pEarHead->pRH[i].stage == EAR_STAGE_PRE_PHY_ENABLE) {
                    if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                        printf("ar5212EarModify: Performing stage 1 ops on RH %d\n", i);
                    }
                    ar5212EarDoRH(devNum, &(pEarHead->pRH[i]));
                }
                break;
                /* Stage: 2 */
            case EAR_LC_POST_RESET:
                if (pEarHead->pRH[i].stage == EAR_STAGE_POST_RESET) {
                    if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                        printf("ar5212EarModify: Performing stage 2 ops on RH %d\n", i);
                    }
                    ar5212EarDoRH(devNum, &(pEarHead->pRH[i]));
                }
                break;
                /* Stage: 3 */
            case EAR_LC_POST_PER_CAL:
                if (pEarHead->pRH[i].stage == EAR_STAGE_POST_PER_CAL) {
                    if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                        printf("ar5212EarModify: Performing stage 3 ops on RH %d\n", i);
                    }
                    ar5212EarDoRH(devNum, &(pEarHead->pRH[i]));
                }
                break;
                /* Stage: Any */
            case EAR_LC_PLL:
                if (IS_PLL_SET(pEarHead->pRH[i].disabler.disableField)) {
                    *modifier = pEarHead->pRH[i].disabler.pllValue;
                    if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                        printf("ar5212EarModify: Modifying PLL value!!! to %d\n", *modifier);
                    }
                    return TRUE;
                }
                break;
                /* Stage: Any */
            case EAR_LC_RESET_OFFSET:
                if ((pEarHead->pRH[i].disabler.valid) &&
                    !((pEarHead->pRH[i].disabler.disableField >> 8) & 0x1))
                {
                    if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                        printf("ar5212EarModify: Disabling reset code Offset cal\n");
                    }
                    return TRUE;
                }
                break;
                /* Stage: Any */
            case EAR_LC_RESET_NF:
                if ((pEarHead->pRH[i].disabler.valid) &&
                    !((pEarHead->pRH[i].disabler.disableField >> 9) & 0x1))
                {
                    if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                        printf("ar5212EarModify: Disabling reset code Noise Floor cal\n");
                    }
                    return TRUE;
                }
                break;
                /* Stage: Any */
            case EAR_LC_RESET_IQ:
                if ((pEarHead->pRH[i].disabler.valid) &&
                    !((pEarHead->pRH[i].disabler.disableField >> 10) & 0x1))
                {
                    if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                        printf("ar5212EarModify: Disabling reset code IQ cal\n");
                    }
                    return TRUE;
                }
                break;
                /* Stage: Any */
            case EAR_LC_PER_FIXED_GAIN:
                if ((pEarHead->pRH[i].disabler.valid) &&
                    !((pEarHead->pRH[i].disabler.disableField >> 11) & 0x1))
                {
                    if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                        printf("ar5212EarModify: Disabling periodic fixed gain calibration\n");
                    }
                    return TRUE;
                }
                break;
                /* Stage: Any */
            case EAR_LC_PER_NF:
                if ((pEarHead->pRH[i].disabler.valid) &&
                    !((pEarHead->pRH[i].disabler.disableField >> 12) & 0x1))
                {
                    if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                        printf("ar5212EarModify: Disabling periodic noise floor cal\n");
                    }
                    return TRUE;
                }
                break;
                /* Stage: Any */
            case EAR_LC_PER_GAIN_CIRC:
                if ((pEarHead->pRH[i].disabler.valid) &&
                    !((pEarHead->pRH[i].disabler.disableField >> 13) & 0x1))
                {
                    if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                        printf("ar5212EarModify: Disabling gain circulation\n");
                    }
                    return TRUE;
                }
                break;
            }
        }
    }
    /* TODO: Track modified analog registers outside of stage 0 and write them with protection */

    return FALSE;
}


/******************** EAR Support Routines ********************/

/**************************************************************
 * ar5212EarDoRH
 *
 * The given register header needs to be executed by performing
 * a register write, modify, or analog bank modify
 *
 * If an ananlog bank is modified - return the bank number as a
 * bit mask.  (bit 0 is bank 0)
 */
static A_UINT16
ar5212EarDoRH(A_UINT32 devNum, REGISTER_HEADER *pRH)
{
    A_UINT16 tag, regLoc = 0, num, opCode;
    A_UINT16 bitsThisWrite, numBits, startBit, bank, column, last, i;
    A_UINT32 address, reg32, mask, regInit;
    RF_REG_INFO *pRfRegs;
    A_UINT16 rfBankMask = 0;

    switch (pRH->type) {
    case EAR_TYPE0:
        do {
            address = pRH->regs[regLoc] & ~T0_TAG_M;
            tag = (A_UINT16)(pRH->regs[regLoc] & T0_TAG_M);
            regLoc++;
            if ((tag == T0_TAG_32BIT) || (tag == T0_TAG_32BIT_LAST)) {
                /* Full word writes */
                reg32 = pRH->regs[regLoc++] << 16;
                reg32 |= pRH->regs[regLoc++];
                if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                    printf("ar5212EarDoRH: Type 0 EAR 32-bit write to 0x%04X : 0x%08x\n", address, reg32);
                }
                REGW(devNum, address, reg32);
            } else if (tag == T0_TAG_16BIT_LOW) {
                /* Half word read/modify/write low data */
                if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                    printf("ar5212EarDoRH: Type 0 EAR 16-bit low write to 0x%04X : 0x%04x\n",
                             address, pRH->regs[regLoc]);
                }
                REG_RMW(devNum, address, 0xFFFF, pRH->regs[regLoc++]);
            } else {
                /* Half word read/modify/write high data */
                if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                    printf("ar5212EarDoRH: Type 0 EAR 16-bit high write to 0x%04X : 0x%04x\n",
                             address, pRH->regs[regLoc]);
                }
                REG_RMW(devNum, address, 0xFFFF0000, pRH->regs[regLoc++] << 16);
            }
        } while (tag != T0_TAG_32BIT_LAST);
        break;
    case EAR_TYPE1:
        address = pRH->regs[regLoc] & ~T1_NUM_M;
        num = (A_UINT16)(pRH->regs[regLoc] & T1_NUM_M);
        regLoc++;
        for (i = 0; i < num + 1; i++) {
            /* Sequential Full word writes */
            reg32 = pRH->regs[regLoc++] << 16;
            reg32 |= pRH->regs[regLoc++];
            if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                printf("ar5212EarDoRH: Type 1 EAR 32-bit write to 0x%04X : 0x%08x\n", address, reg32);
            }
            REGW(devNum, address, reg32);
            address += sizeof(A_UINT32);
        }
        break;
    case EAR_TYPE2:
        do {
            last = (A_UINT16)(IS_TYPE2_LAST(pRH->regs[regLoc]));
            bank = (A_UINT16)((pRH->regs[regLoc] & T2_BANK_M) >> T2_BANK_S);
            /* Record which bank is written */
            rfBankMask |= 1 << bank;
            column = (A_UINT16)((pRH->regs[regLoc] & T2_COL_M) >> T2_COL_S);
            startBit = (A_UINT16)(pRH->regs[regLoc] & T2_START_M);
            pRfRegs = ar5212GetRfBank(devNum, bank);
            if (IS_TYPE2_EXTENDED(pRH->regs[regLoc++])) {
                num = (A_UINT16)(A_DIV_UP(pRH->regs[regLoc], 16));
                numBits = pRH->regs[regLoc];
                regLoc++;
                for (i = 0; i < num; i++) {
                    /* Modify the bank 16 bits at a time */
                    bitsThisWrite = (numBits > 16) ? (A_UINT16)16 : numBits;
                    numBits = (A_UINT16)(numBits - bitsThisWrite);
                    reg32 = pRH->regs[regLoc++];
                    if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                        printf("ar5212EarDoRH: Type 2 EAR E analog modify bank %d, startBit %d, column %d numBits %d data %d\n",
                                 bank, startBit, column, bitsThisWrite, reg32);
                    }
                    ar5212ModifyRfBuffer(pRfRegs, reg32, bitsThisWrite, startBit, column);
                    startBit = (A_UINT16)(startBit + bitsThisWrite);
                }
            } else {
                numBits = (A_UINT16)((pRH->regs[regLoc] & T2_NUMB_M) >> T2_NUMB_S);
                reg32   = pRH->regs[regLoc++] & T2_DATA_M;
                if (EarDebugLevel >= EAR_DEBUG_VERBOSE) {
                    printf("ar5212EarDoRH: Type 2 EAR analog modify bank %d, startBit %d, column %d numBits %d data %d\n",
                             bank, startBit, column, numBits, reg32);
                }
                ar5212ModifyRfBuffer(pRfRegs, reg32, numBits, startBit, column);
            }
        } while (!last);
        break;
    case EAR_TYPE3:
        do {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
777久久久精品| 色香蕉成人二区免费| 亚洲成在线观看| 亚洲影视在线观看| 亚洲精品日韩专区silk| 亚洲视频一区二区免费在线观看 | 欧美在线综合视频| 91伊人久久大香线蕉| 一本到不卡精品视频在线观看| 99精品国产一区二区三区不卡| av电影天堂一区二区在线| 91同城在线观看| 欧美精品一二三| 欧美大片拔萝卜| 国产视频亚洲色图| 亚洲三级电影网站| 亚洲二区视频在线| 精品一二三四在线| 成人sese在线| 欧美日韩国产综合视频在线观看| 91麻豆精品国产91久久久久久| 精品久久久久久综合日本欧美| 国产欧美一区二区精品久导航| 成人免费视频在线观看| 日韩一区欧美二区| 国产精品一品二品| 91国偷自产一区二区使用方法| 欧美喷潮久久久xxxxx| 国产亚洲综合av| 亚洲最大成人网4388xx| 久久69国产一区二区蜜臀| 99热这里都是精品| 欧美一区二区三区人| 国产精品福利av| 麻豆国产一区二区| 色婷婷精品大视频在线蜜桃视频 | 国内精品伊人久久久久影院对白| 国产成a人亚洲精品| 欧美日韩在线综合| 国产精品青草综合久久久久99| 亚洲国产cao| av激情综合网| 久久影院午夜片一区| 亚洲国产成人精品视频| 成人自拍视频在线观看| 欧美日韩高清在线| 国产精品大尺度| 国产曰批免费观看久久久| 欧美亚洲综合另类| 亚洲四区在线观看| 国产黄色精品网站| 日韩一区二区精品在线观看| 亚洲精品高清在线| 成人免费毛片app| 久久久久国产精品免费免费搜索| 亚洲国产精品一区二区www| 不卡欧美aaaaa| 久久久久国产精品麻豆ai换脸| 日韩不卡一区二区三区| 91国产免费观看| 亚洲欧洲中文日韩久久av乱码| 国产激情一区二区三区桃花岛亚洲| 91精品蜜臀在线一区尤物| 亚洲美女视频在线| 91蜜桃免费观看视频| 国产精品女主播av| 国产高清久久久| 久久精品在这里| 国产一区二区福利| 久久久久久97三级| 国产精品99久久久久| 国产欧美一区视频| 国产二区国产一区在线观看| wwwwww.欧美系列| 国产综合色在线视频区| 337p粉嫩大胆噜噜噜噜噜91av| 蜜臀av亚洲一区中文字幕| 7777女厕盗摄久久久| 蜜臀久久99精品久久久久久9| 91精品中文字幕一区二区三区| 首页欧美精品中文字幕| 制服丝袜中文字幕亚洲| 日韩国产欧美在线视频| 日韩三级中文字幕| 国产一区二区三区免费| 国产人伦精品一区二区| www.66久久| 亚洲高清免费在线| 日韩美女一区二区三区| 国产麻豆精品一区二区| 国产精品乱码一区二三区小蝌蚪| 成人国产精品免费网站| 一区二区三区四区国产精品| 精品视频在线免费观看| 青青草国产成人av片免费| 2023国产精品| 色一情一伦一子一伦一区| 三级欧美在线一区| 久久女同性恋中文字幕| 不卡免费追剧大全电视剧网站| 亚洲一区免费视频| 日韩欧美一二三四区| 成人性色生活片| 亚洲.国产.中文慕字在线| 精品国产不卡一区二区三区| 本田岬高潮一区二区三区| 午夜视黄欧洲亚洲| 久久久久久久久岛国免费| 91九色最新地址| 蜜臂av日日欢夜夜爽一区| 国产精品久久久久久久裸模| 欧美日韩免费观看一区三区| 国产一区二区三区综合| 亚洲另类在线制服丝袜| 欧美岛国在线观看| 色素色在线综合| 国产一区二区伦理片| 亚洲国产成人av| 中文字幕一区av| 337p粉嫩大胆噜噜噜噜噜91av| 在线观看亚洲a| 丁香啪啪综合成人亚洲小说 | 久久午夜电影网| 色噜噜狠狠色综合欧洲selulu| 国产一区亚洲一区| 日韩中文字幕麻豆| 亚洲欧美日韩小说| 国产日韩欧美高清在线| 欧美一级理论性理论a| 色综合久久久久综合体桃花网| 国产乱码一区二区三区| 日韩av电影天堂| 一区二区国产盗摄色噜噜| 亚洲国产高清不卡| 欧美r级电影在线观看| 欧美日韩黄色一区二区| 91在线观看污| 成人免费视频一区| 国产成人精品亚洲日本在线桃色| 日产国产高清一区二区三区 | 欧美一区三区二区| 在线观看亚洲一区| 在线视频观看一区| 色8久久人人97超碰香蕉987| 95精品视频在线| 波多野结衣中文字幕一区| 国产一区二区三区黄视频| 麻豆精品蜜桃视频网站| 蜜臀99久久精品久久久久久软件| 午夜精品一区在线观看| 亚洲男人的天堂在线aⅴ视频| 国产精品第四页| 亚洲视频免费看| 亚洲精品中文在线| 亚洲三级在线播放| 亚洲精品国产无套在线观| 亚洲黄色小说网站| 亚洲高清免费视频| 日韩1区2区日韩1区2区| 另类中文字幕网| 国模无码大尺度一区二区三区| 韩国中文字幕2020精品| 国产不卡在线视频| 91在线一区二区三区| 欧美伊人久久久久久午夜久久久久| 91成人在线观看喷潮| 欧美日韩一区二区三区在线看| 91精品欧美综合在线观看最新| 日韩一区二区麻豆国产| 久久精品视频免费| 亚洲区小说区图片区qvod| 亚洲一区二区三区四区五区黄| 亚洲成a人在线观看| 久久精品99久久久| 成人国产精品免费观看动漫| 日本高清不卡在线观看| 欧美日韩午夜影院| 久久夜色精品国产噜噜av| 成人免费在线观看入口| 午夜欧美电影在线观看| 久久99国产精品免费| 菠萝蜜视频在线观看一区| 精品视频在线免费看| 久久久夜色精品亚洲| 一级日本不卡的影视| 久久99精品网久久| 91久久精品日日躁夜夜躁欧美| 日韩三级视频在线观看| 国产精品国产三级国产专播品爱网 | 亚洲精品videosex极品| 免费欧美在线视频| av在线不卡电影| 日韩精品中文字幕在线一区| 中文字幕亚洲区| 久久精品国产**网站演员| 色综合久久久久综合99| 精品国产伦一区二区三区观看方式 | 日韩视频在线你懂得| 亚洲丝袜另类动漫二区| 久久97超碰色|