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

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

?? meep6000.c

?? Atheros AP Test with Agilent N4010A source code
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
 * Copyright (c) 2002-2005 Atheros Communications, Inc.
 * All rights reserved.
 *
 */

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

#ifdef VXWORKS
#include "vxworks.h"
#endif

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


#include <errno.h>
#include <stdio.h>
#include <string.h>
#ifndef VXWORKS
#include <malloc.h>
#include <assert.h>
#endif
#include "wlantype.h"

#include "mCfg6000.h"
#include "mEep6000.h"

#include "ar6000reg.h"
#include "mConfig.h"

//#include "ar5211reg.h"

#include "mEepStruct6000.h"

MANLIB_API A_UINT8 dummyEepromWriteArea[512];

static A_UINT16
fbin2freq(A_UINT8 fbin, A_BOOL is2GHz);

static A_INT16
interpolate(A_UINT16 target, A_UINT16 srcLeft, A_UINT16 srcRight,
            A_INT16 targetLeft, A_INT16 targetRight);

static A_BOOL
getLowerUpperIndex(A_UINT8 target, A_UINT8 *pList, A_UINT16 listSize,
                   A_UINT16 *indexL, A_UINT16 *indexR);

/* Configuring the Transmit Power Per Rate Baseband Table */
static void
ar6000SetPowerPerRateTable(A_UINT32 devNum, A_UINT32 freq, A_UINT16 *ratesArray,
                           A_UINT16 cfgCtl, A_UINT16 AntennaReduction, A_UINT16 powerLimit);

static A_UINT16
ar6000GetMaxEdgePower(A_UINT32 freq, CAL_CTL_EDGES *pRdEdgesPower, A_BOOL is2GHz);

static void
ar6000GetTargetPowers(A_UINT32 freq, CAL_TARGET_POWER *powInfo,
                      A_UINT16 numChannels, CAL_TARGET_POWER *pNewPower, A_BOOL is2GHz);

/* Interpolating to get the txPower calibration data based on EEPROM values */
static void
ar6000SetPowerCalTable(A_UINT32 devNum, A_UINT32 freq, A_INT16 *pTxPowerIndexOffset);

static void
ar6000GetGainBoundariesAndPdadcs(A_UINT32 devNum, A_UINT32 freq, CAL_DATA_PER_FREQ * pRawDataSet, 
                                 A_UINT8 * bChans,  A_UINT16 availPiers,
                                 A_UINT16 tPdGainOverlap, A_INT16 *pMinCalPower, A_UINT16 * pPdGainBoundaries,
                                 A_UINT8 * pPDADCValues, A_UINT16 * xpdGainValues, A_UINT16 numXpdGains);

static A_BOOL
ar6000FillVpdTable(A_UINT8 pMin, A_UINT8 pMax, A_UINT8 *pwrList,
                   A_UINT8 *vpdList, A_UINT16 numIntercepts, A_UINT8 *pRetVpdList);

static void readEepromOldStyle (
 A_UINT32 devNum
);

static void readEepromLocs (
 A_UINT32 devNum
);

/**************************************************************
 * ar6000EepromAttach
 *
 * Attach either the provided data stream or EEPROM to the EEPROM data structure
 */
A_BOOL
ar6000EepromAttach(A_UINT32 devNum)
{
    LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
    A_UINT16 sum = 0;
    A_UINT16 *pHalf;
    A_UINT32 i;

    //readEepromOldStyle(devNum);    
    readEepromLocs(devNum);    
    pLibDev->ar6kEep = (AR6K_EEPROM *)dummyEepromWriteArea;

    pHalf = (A_UINT16 *)pLibDev->ar6kEep;

    for (i = 0; i < sizeof(AR6K_EEPROM)/2; i++) {
        sum ^= *pHalf++;
    }

    /* Check CRC - Attach should fail on a bad checksum */
    if (sum != 0xffff) {
        //mError(devNum, EIO, "%s: bad EEPROM checksum 0x%x\n", __func__, sum);
		mError(devNum, EIO, "bad EEPROM checksum 0x%x\n", sum);
        return FALSE;
    }

    /* Setup some values checked by common code */
    pLibDev->eepData.version = pLibDev->ar6kEep->baseEepHeader.version;
    pLibDev->eepData.protect = 0;
    pLibDev->eepData.turboDisabled = TRUE;
    pLibDev->eepData.currentRD = pLibDev->ar6kEep->baseEepHeader.regDmn;
    /* Do we need to fill in the tpcMap? */

    return TRUE;
}

static A_UINT32 newEepromArea[512];

void readEepromOldStyle (
 A_UINT32 devNum
)
{
    A_UINT32 jj;
    A_UINT16 *tempPtr = (A_UINT16 *)dummyEepromWriteArea;

    eepromReadBlock(devNum, 0, 256, newEepromArea);
        
    for(jj=0; jj < 256; jj++) {
        *(tempPtr+jj) = *(newEepromArea + jj);  
    }
}

void readEepromLocs (
 A_UINT32 devNum
)
{
    LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
    A_UINT32 jj;
    A_UINT8 *tempPtr = (A_UINT8 *)dummyEepromWriteArea;

    //eepromReadBlock(devNum, 0, 256, newEepromArea);
    if (pLibDev->devMap.remoteLib && (pLibDev->devMap.r_eepromReadLocs != NULL)) {
	   pLibDev->devMap.r_eepromReadLocs(devNum, 0, 256, tempPtr);
	}
        
/*
    for(jj=0; jj < 256; jj++) {
        *(tempPtr+jj) = *(newEepromArea + jj);  
    }
*/
}

/**************************************************************
 * ar6000EepromSetBoardValues
 *
 * Read EEPROM header info and program the device for correct operation
 * given the channel value.
 */
void
ar6000EepromSetBoardValues(A_UINT32 devNum, A_UINT32 freq)
{
    LIB_DEV_INFO  *pLibDev = gLibInfo.pLibDevArray[devNum];
    int is2GHz = ((pLibDev->mode == MODE_11G) || (pLibDev->mode == MODE_11B));
    MODAL_EEP_HEADER *pModal;
    A_UINT16 antWrites[11];

    assert(((pLibDev->eepData.version >> 12) & 0xF) == AR6000_EEP_VER);
    pModal = &(pLibDev->ar6kEep->modalHeader[is2GHz]);

    /* Set the antenna register(s) correctly for the chip revision */
    antWrites[0] = pModal->antCtrl0;
    antWrites[1] = pModal->antCtrl[0] & 0x3F;
    antWrites[2] = (pModal->antCtrl[0] >> 6) & 0x3F;
    antWrites[3] = (pModal->antCtrl[0] >> 12) & 0x3F;
    antWrites[4] = (pModal->antCtrl[0] >> 18) & 0x3F;
    antWrites[5] = (pModal->antCtrl[0] >> 24) & 0x3F;
    antWrites[6] = pModal->antCtrl[1] & 0x3F;
    antWrites[7] = (pModal->antCtrl[1] >> 6) & 0x3F;
    antWrites[8] = (pModal->antCtrl[1] >> 12) & 0x3F;
    antWrites[9] = (pModal->antCtrl[1] >> 18) & 0x3F;
    antWrites[10] = (pModal->antCtrl[1] >> 24) & 0x3F;
    forceAntennaTbl5211(devNum, antWrites);

    writeField(devNum, "bb_switch_settling", pModal->switchSettling);
    writeField(devNum, "bb_adc_desired_size", pModal->adcDesiredSize);
    writeField(devNum, "bb_pga_desired_size", pModal->pgaDesiredSize);
    writeField(devNum, "bb_txrxatten", pModal->txRxAtten);
    writeField(devNum, "bb_rxtx_margin_2ghz", pModal->rxTxMargin);

    writeField(devNum, "bb_tx_end_to_xpaa_off", pModal->txEndToXpaOff);
    writeField(devNum, "bb_tx_end_to_xpab_off", pModal->txEndToXpaOff);
    writeField(devNum, "bb_tx_frame_to_xpaa_on", pModal->txFrameToXpaOn);
    writeField(devNum, "bb_tx_frame_to_xpab_on", pModal->txFrameToXpaOn);

    writeField(devNum, "bb_tx_end_to_xlna_on",pModal->txEndToXlnaOn);
    writeField(devNum, "bb_thresh62", pModal->thresh62);

    /* write previous IQ results */
    writeField(devNum, "bb_iqcorr_q_i_coff", pModal->iqCalI);
    writeField(devNum, "bb_iqcorr_q_q_coff", pModal->iqCalQ);
    // writeField(devNum, "bb_do_iqcal", 1);

    pLibDev->eepromHeaderApplied[pLibDev->mode] = TRUE;
    return;
}

/**************************************************************
 * ar6000EepromSetTransmitPower
 *
 * Set the transmit power in the baseband for the given
 * operating channel and mode.
 */
void
ar6000EepromSetTransmitPower(A_UINT32 devNum, A_UINT32 freq, A_UINT16 *pRates)
{
#define POW_SM(_r, _s)     (((_r) & 0x3f) << (_s))
#define N(a)            (sizeof (a) / sizeof (a[0]))
    LIB_DEV_INFO  *pLibDev = gLibInfo.pLibDevArray[devNum];
    A_UINT16 ratesArray[NUM_RATES];
    A_UINT16 powerLimit = AR6000_MAX_RATE_POWER;
    A_INT16  txPowerIndexOffset = 0;
    A_UINT16 cfgCtl;
    A_UINT16 twiceAntennaReduction = (cfgCtl = 0x10) ? 6 : 0;
    int i;

    memset(ratesArray, 0, sizeof(ratesArray));

    if (pRates) {
        memcpy(ratesArray, pRates, sizeof(A_UINT16) * NUM_RATES);
    }

    if(pLibDev->eePromLoad) {
        assert(((pLibDev->eepData.version >> 12) & 0xF) == AR6000_EEP_VER);
        cfgCtl = pLibDev->ar6kEep->baseEepHeader.regDmn & 0xFF;
        switch (pLibDev->mode) {
        case MODE_11A:
            cfgCtl |= CTL_11A;
            break;
        case MODE_11G:
        case MODE_11O:
            cfgCtl |= CTL_11G;
            break;
        case MODE_11B:
            cfgCtl |= CTL_11B;
            break;
        default:
            assert(0);
        } 

        if (!pRates) {
            ar6000SetPowerPerRateTable(devNum, freq, ratesArray, cfgCtl, twiceAntennaReduction, powerLimit);
        }
        ar6000SetPowerCalTable(devNum, freq, &txPowerIndexOffset);
    }

    /*
     * txPowerIndexOffset is set by the SetPowerTable() call -
     *  adjust the rate table (0 offset if rates EEPROM not loaded)
     */
    for (i = 0; i < N(ratesArray); i++) {
        ratesArray[i] += txPowerIndexOffset;
        if (ratesArray[i] > AR6000_MAX_RATE_POWER)
            ratesArray[i] = AR6000_MAX_RATE_POWER;
    }
    pLibDev->pwrIndexOffset = txPowerIndexOffset;

    /* Write the OFDM power per rate set */
    REGW(devNum, 0x9934,
        POW_SM(ratesArray[3], 24)
          | POW_SM(ratesArray[2], 16)
          | POW_SM(ratesArray[1],  8)
          | POW_SM(ratesArray[0],  0)
    );
    REGW(devNum, 0x9938,
        POW_SM(ratesArray[7], 24)
          | POW_SM(ratesArray[6], 16)
          | POW_SM(ratesArray[5],  8)
          | POW_SM(ratesArray[4],  0)
    );

    /* Write the CCK power per rate set */
    REGW(devNum, 0xa234,
        POW_SM(ratesArray[10], 24)
          | POW_SM(ratesArray[9],  16)
          | POW_SM(ratesArray[15],  8) /* XR target power */
          | POW_SM(ratesArray[8],   0)
    );
    REGW(devNum, 0xa238,
        POW_SM(ratesArray[14], 24)
          | POW_SM(ratesArray[13], 16)
          | POW_SM(ratesArray[12],  8)
          | POW_SM(ratesArray[11],  0)
    );

    /*
     * Set max power to 31.5 dBm and, optionally,
     * enable TPC in tx descriptors.
     */
    REGW(devNum, 0x993c, AR6000_MAX_RATE_POWER);

    return;
#undef N
#undef POW_SM
}

/**************************************************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色中文字幕| www.日韩精品| 免费一区二区视频| 一区二区三区在线不卡| |精品福利一区二区三区| 中文字幕精品一区二区三区精品| 91精品福利视频| 精品国产123| 久久精品国产99| 精品伊人久久久久7777人| 蜜桃视频一区二区三区在线观看| 一本大道久久a久久精品综合| 在线一区二区三区做爰视频网站| 久久久精品免费网站| 久久精品国内一区二区三区| 欧美怡红院视频| 一区二区三区四区不卡视频| 99在线视频精品| 久久精品在这里| 美日韩一级片在线观看| 欧美日韩久久一区二区| 伊人一区二区三区| 99久久精品国产精品久久| 2020国产精品自拍| 国产在线精品一区二区三区不卡| 欧美日韩国产免费一区二区| 亚洲成人777| 欧美欧美欧美欧美| 日韩国产在线一| 制服丝袜激情欧洲亚洲| 亚洲va在线va天堂| 欧美精品xxxxbbbb| 日韩电影一区二区三区| 日韩精品一区二区三区老鸭窝| 五月婷婷激情综合网| 91精品蜜臀在线一区尤物| 奇米综合一区二区三区精品视频| 91精品国产手机| 国内不卡的二区三区中文字幕| 精品久久久久久久久久久院品网 | 偷拍日韩校园综合在线| 欧美日韩亚洲国产综合| 天堂一区二区在线| 欧美一区二区三区免费| 国产一区二区三区四区五区美女 | 日韩三级av在线播放| 日韩av不卡在线观看| 精品福利在线导航| 成人一级黄色片| 亚洲欧美另类久久久精品2019| 欧美伊人久久久久久久久影院| 亚洲成人综合在线| 精品国产一区久久| 成人综合日日夜夜| 亚洲伊人色欲综合网| 欧美日本在线看| 国产精品一区二区久久不卡| 日韩理论片一区二区| 欧美日韩一区二区在线观看| 久久超碰97人人做人人爱| 欧美经典一区二区| 日韩欧美在线不卡| 国产乱色国产精品免费视频| 国产精品美女视频| 精品视频在线免费| 狠狠色2019综合网| 一区二区三区中文免费| 欧美本精品男人aⅴ天堂| av在线一区二区| 免费观看一级欧美片| 国产精品麻豆久久久| 欧美一级一区二区| aaa国产一区| 久久精品国产99国产| 一区二区三区不卡视频在线观看| 日韩欧美一区二区视频| 97超碰欧美中文字幕| 久久99精品久久只有精品| 亚洲天堂2016| 久久色在线视频| 欧美老女人在线| 99久久国产综合色|国产精品| 奇米影视7777精品一区二区| 亚洲九九爱视频| 久久精品人人做人人爽人人| 欧美精品v日韩精品v韩国精品v| 成人av一区二区三区| 激情综合色播激情啊| 午夜精品视频在线观看| 成人免费在线视频| 国产日产欧美精品一区二区三区| 欧美日高清视频| 色8久久人人97超碰香蕉987| 成人性视频免费网站| 毛片不卡一区二区| 视频一区二区欧美| 婷婷开心激情综合| 亚洲一区二区在线免费看| 亚洲欧洲精品一区二区精品久久久| 精品国产乱码久久久久久影片| 欧美日韩一级大片网址| 在线中文字幕一区| 在线观看国产精品网站| 色天使色偷偷av一区二区| 成人h动漫精品一区二区| 国产一区二三区| 国产精一品亚洲二区在线视频| 青青草国产成人99久久| 日本在线播放一区二区三区| 丝袜美腿亚洲综合| 青青青伊人色综合久久| 日韩1区2区3区| 懂色av一区二区在线播放| 精久久久久久久久久久| 精品一区二区在线视频| 激情综合五月天| 国产一区二区在线观看视频| 国产一区二区三区视频在线播放| 国产美女视频91| 成人深夜视频在线观看| a4yy欧美一区二区三区| 91国偷自产一区二区三区观看 | 欧美一区二区观看视频| 欧美日韩国产成人在线免费| 欧美少妇bbb| 欧美日韩国产精品成人| 日韩一区二区在线看片| 日韩欧美国产成人一区二区| 精品福利在线导航| 欧美激情在线观看视频免费| 中文字幕 久热精品 视频在线| 国产精品护士白丝一区av| 1区2区3区精品视频| 一区二区三区免费看视频| 亚洲国产视频在线| 美腿丝袜亚洲色图| 成人黄色在线网站| 欧美精品一级二级三级| 精品久久国产字幕高潮| 国产精品美女久久久久久| 亚洲女人****多毛耸耸8| 午夜婷婷国产麻豆精品| 精东粉嫩av免费一区二区三区| 国产91对白在线观看九色| 91在线一区二区三区| 欧美日韩精品三区| 欧美韩国日本不卡| 亚洲成人福利片| 国产成人免费av在线| 欧美中文字幕一区二区三区亚洲| 日韩亚洲欧美一区| 亚洲精品视频自拍| 精品在线观看视频| 在线观看网站黄不卡| 日韩精品一区二区三区在线播放| 亚洲欧洲色图综合| 久热成人在线视频| 91福利精品视频| 国产欧美综合在线观看第十页| 亚洲国产一区二区视频| 成人精品一区二区三区四区| 91精品国产乱码久久蜜臀| 国产精品国产精品国产专区不蜜| 欧美aⅴ一区二区三区视频| av在线不卡免费看| 欧美精品一区二区久久久| 有坂深雪av一区二区精品| 国产盗摄女厕一区二区三区| 欧美日韩成人综合| 日韩毛片视频在线看| 国产综合色产在线精品| 久久先锋影音av鲁色资源网| 亚洲成人一区在线| 99riav一区二区三区| 久久久久久久久久久久久女国产乱 | 99久久国产综合精品色伊| 精品国产伦理网| 日韩电影免费在线观看网站| 色婷婷亚洲精品| 中文字幕欧美国产| 国产综合久久久久久鬼色| 欧美一区二区三区的| 亚洲自拍偷拍av| 色女孩综合影院| 国产精品久久毛片| 国产福利精品一区二区| 欧美变态tickle挠乳网站| 日韩**一区毛片| 91精品国产乱码久久蜜臀| 丝袜美腿成人在线| 91麻豆精品91久久久久同性| 亚洲bt欧美bt精品| 欧美妇女性影城| 日产国产欧美视频一区精品| 这里是久久伊人| 久久精品国产亚洲5555| 精品日韩在线观看| 国产一区二区三区最好精华液| 欧美电视剧在线观看完整版| 激情综合亚洲精品|